parseMessages method

  1. @override
List<HubMessage?> parseMessages(
  1. dynamic input,
  2. Logging? logging
)
override

Creates an array of HubMessage objects from the specified serialized representation.

Implementation

@override
List<HubMessage?> parseMessages(dynamic input, Logging? logging) {
  // Only JsonContent is allowed.
  if (!(input is String)) {
    throw Exception(
        'Invalid input for JSON hub protocol. Expected a string.');
  }

  final jsonInput = input;
  final hubMessages = <HubMessage?>[];

  // ignore: unnecessary_null_comparison
  if (input == null) {
    return hubMessages;
  }

  // Parse the messages
  final messages = TextMessageFormat.parse(jsonInput);
  for (var message in messages) {
    final jsonData = json.decode(message);
    final messageType =
        _getMessageTypeFromJson(jsonData as Map<String, dynamic>);
    HubMessage? parsedMessage;

    switch (messageType) {
      case MessageType.invocation:
        parsedMessage = InvocationMessageExtensions.fromJson(
            jsonData);
        _isInvocationMessage(parsedMessage as InvocationMessage);
        break;
      case MessageType.streamItem:
        parsedMessage = StreamItemMessageExtensions.fromJson(
            jsonData);
        _isStreamItemMessage(parsedMessage as StreamItemMessage);
        break;
      case MessageType.completion:
        parsedMessage = CompletionMessageExtensions.fromJson(
            jsonData);
        _isCompletionMessage(parsedMessage as CompletionMessage);
        break;
      case MessageType.ping:
        parsedMessage =
            PingMessageExtensions.fromJson(jsonData);
        // Single value, no need to validate
        break;
      case MessageType.close:
        parsedMessage =
            CloseMessageExtensions.fromJson(jsonData);
        // All optional values, no need to validate
        break;
      default:
        // Future protocol changes can add message types, old clients can ignore them
        logging!(
            LogLevel.information,
            'Unknown message type \'' +
                parsedMessage!.type.toString() +
                '\' ignored.');
        continue;
    }
    hubMessages.add(parsedMessage);
  }

  return hubMessages;
}