import 'package:backend/db/database.dart'; import 'package:backend/db/db_access.dart'; import 'package:backend/socket_manager.dart'; import 'package:dart_frog/dart_frog.dart'; import 'package:dart_frog_web_socket/dart_frog_web_socket.dart'; import 'package:logging/logging.dart'; Future<Response> onRequest(RequestContext context, String roomCode) async { final logger = Logger('room/[$roomCode]/ws'); final handler = webSocketHandler(protocols: ['game.room.v1'], (channel, protocol) async { try { logger.finest(protocol); final room = await Db.getRoomByCode(roomCode); if (room == null) { logger.finer('Room not found, aborting...'); await channel.sink.close(4404, 'Room not found'); return; } final user = context.read<User>(); final status = await SocketManager().addConnection(channel, roomUuid: room.uuid, userUuid: user.uuid); if (status == Status.failure) { logger.finer('Failed to spawn room isolate, closing connection.'); await channel.sink.close(4404, 'Room not found'); return; } } catch (e) { logger.severe('Unexpected error occurred getting websocket connection', e, StackTrace.current); } }); return handler(context); }