handle method

Future<WebSocket> handle(
  1. DoxRequest req
)

handle http request and convert into websocket

Implementation

Future<WebSocket> handle(DoxRequest req) async {
  WebSocket ws = await WebSocketTransformer.upgrade(req.httpRequest);
  String socketId = _createSocketId(req);

  /// add to active connection
  _storage.addWebSocketInfo(socketId, ws);
  _storage.addWebSocketIdToRoom(socketId, _defaultRoom);

  ws.listen(
    (dynamic data) async {
      Map<String, dynamic> payload = jsonDecode(data);

      String eventName = payload['event'];
      dynamic message = payload['message'];
      Function? controller = _events[eventName];

      if (controller != null) {
        SocketEmitter emitter =
            SocketEmitter(sender: socketId, roomId: payload['room']);
        Function.apply(controller, <dynamic>[emitter, message]);
      }

      if (eventName == _joinRoomEventName) {
        _storage.addWebSocketIdToRoom(socketId, message);
      }
    },
    onDone: () async {
      _storage.removeWebSocketInfo(socketId);
    },
    onError: (dynamic error) async {
      _storage.removeWebSocketInfo(socketId);
    },
  );
  return ws;
}