# 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, )