parseMessages method
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;
}