handleData method

dynamic handleData(
  1. WebSocketContext socket,
  2. dynamic data
)

Handles incoming data from a WebSocket.

Implementation

dynamic handleData(WebSocketContext socket, data) async {
  try {
    socket._onData.add(data);
    var fromJson = json.decode(data.toString());
    var action = WebSocketAction.fromJson(fromJson as Map);
    _onAction.add(action);

    if (action.eventName == null ||
        action.eventName is! String ||
        action.eventName!.isEmpty) {
      throw AngelHttpException.badRequest();
    }

    if (fromJson.containsKey('eventName')) {
      socket._onAction.add(WebSocketAction.fromJson(fromJson));
      socket.on
          ._getStreamForEvent(fromJson['eventName'].toString())!
          .add(fromJson['data'] as Map?);
    }

    if (action.eventName == authenticateAction) {
      await handleAuth(action, socket);
    }

    if (action.eventName!.contains('::')) {
      var split = action.eventName!.split('::');

      if (split.length >= 2) {
        if (actions.contains(split[1])) {
          var event = await handleAction(action, socket);
          if (event is Future) event = await event;
        }
      }
    }
  } catch (e, st) {
    _log.severe('Invalid data');
    catchError(e, st, socket);
  }
}