parseMessages method
Creates an array of {@link @microsoft/signalr.HubMessage} objects from the specified serialized representation.
A string containing the serialized representation. A logger that will be used to log messages that occur during parsing.
Implementation
@override
List<HubMessageBase> parseMessages(Object input, Logger logger) {
// Only JsonContent is allowed.
if (input is! String) {
throw SignalRException(
message: "Invalid input for JSON hub protocol. Expected a string.",
type: SignalRExceptionType.invalidPayload);
}
final jsonInput = input;
final List<HubMessageBase> hubMessages = [];
// Parse the messages
final messages = TextMessageFormat.parse(jsonInput);
for (var message in messages) {
final jsonData = json.decode(message);
final messageType = _getMessageTypeFromJson(jsonData);
HubMessageBase messageObj;
switch (messageType) {
case MessageType.invocation:
messageObj = _getInvocationMessageFromJson(jsonData);
break;
case MessageType.streamInvocation:
messageObj = _getStreamInvocationMessageFromJson(jsonData);
break;
case MessageType.streamItem:
messageObj = _getStreamItemMessageFromJson(jsonData);
break;
case MessageType.completion:
messageObj = _getCompletionMessageFromJson(jsonData);
break;
case MessageType.ping:
messageObj = _getPingMessageFromJson(jsonData);
break;
case MessageType.close:
messageObj = _getCloseMessageFromJson(jsonData);
break;
default:
// Future protocol changes can add message types, old clients can ignore them
logger.info("Unknown message type '$messageType' ignored.");
continue;
}
hubMessages.add(messageObj);
}
return hubMessages;
}