72 lines
2.4 KiB
Python
72 lines
2.4 KiB
Python
# socket_controller.py
|
|
from flask_socketio import SocketIO, emit, join_room, leave_room
|
|
from flask import request
|
|
from services import SessionService
|
|
|
|
|
|
class SocketController:
|
|
def __init__(self, socketio: SocketIO, session_service: SessionService):
|
|
self.socketio = socketio
|
|
self.session_service = session_service
|
|
self._register_events()
|
|
|
|
def _register_events(self):
|
|
@self.socketio.on("connect")
|
|
def on_connect():
|
|
print(f"Client connected: {request.sid}")
|
|
emit("connection_response", {"status": "connected", "sid": request.sid})
|
|
|
|
@self.socketio.on("disconnect")
|
|
def on_disconnect():
|
|
print(f"Client disconnected: {request.sid}")
|
|
|
|
@self.socketio.on("join_room")
|
|
def handle_join_room(data):
|
|
session_code = data.get("session_code")
|
|
user_id = data.get("user_id")
|
|
|
|
if not session_code or not user_id:
|
|
emit("error", {"message": "session_id and user_id are required"})
|
|
return
|
|
|
|
session = self.session_service.join_session(session_code, user_id)
|
|
if session is None:
|
|
emit("error", {"message": "Failed to join session or session inactive"})
|
|
return
|
|
|
|
join_room(session_code)
|
|
user_data = self.session_service.join_session()
|
|
emit(
|
|
"room_message",
|
|
{
|
|
"message": "someone has joined the room.",
|
|
"room": session_code,
|
|
"argument": "adm_update",
|
|
},
|
|
room=session_code,
|
|
)
|
|
|
|
@self.socketio.on("leave_room")
|
|
def handle_leave_room(data):
|
|
session_id = data.get("session_id")
|
|
username = data.get("username", "anonymous")
|
|
|
|
leave_room(session_id)
|
|
emit(
|
|
"room_message",
|
|
{"message": f"{username} has left the room.", "room": session_id},
|
|
room=session_id,
|
|
)
|
|
|
|
@self.socketio.on("send_message")
|
|
def on_send_message(data):
|
|
session_id = data.get("session_id")
|
|
message = data.get("message")
|
|
username = data.get("username", "anonymous")
|
|
|
|
emit(
|
|
"receive_message",
|
|
{"message": message, "from": username},
|
|
room=session_id,
|
|
)
|