from asgiref.sync import async_to_sync from channels.layers import get_channel_layer async def broadcast_phase_event(session_code: str, event_type: str, payload: dict) -> None: """Send a phase event to all WebSocket clients connected to a game session.""" channel_layer = get_channel_layer() group_name = f"game_{session_code.upper()}" await channel_layer.group_send( group_name, { "type": "phase_event", "payload": {"type": event_type, **payload}, }, ) def sync_broadcast_phase_event(session_code: str, event_type: str, payload: dict) -> None: """Sync wrapper for calling broadcast_phase_event from synchronous Django views.""" async_to_sync(broadcast_phase_event)(session_code, event_type, payload)