TIF_E41211115_Genso_quiz_ba.../app/controllers/socket_conroller.py

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