parseHandshakeResponse method
Implementation
Tuple2<dynamic, HandshakeResponseMessage> parseHandshakeResponse(
dynamic data) {
HandshakeResponseMessage _responseMessage;
String _messageData;
dynamic _remainingData;
if (data is Uint8List) {
// Format is binary but still need to read JSON text from handshake response
var separatorIndex = data.indexOf(TextMessageFormat.RecordSeparatorCode);
if (separatorIndex == -1) {
throw Exception('Message is incomplete.');
}
// content before separator is handshake response
// optional content after is additional messages
final responseLength = separatorIndex + 1;
_messageData = utf8.decode(data.sublist(0, responseLength));
_remainingData = (data.length > responseLength)
? data.sublist(responseLength, data.length)
: null;
} else {
final textData = data as String;
final separatorIndex =
textData.indexOf(TextMessageFormat.recordSeparator);
if (separatorIndex == -1) {
throw Exception('Message is incomplete.');
}
// content before separator is handshake response
// optional content after is additional messages
final responseLength = separatorIndex + 1;
_messageData = textData.substring(0, responseLength);
_remainingData = (textData.length > responseLength)
? textData.substring(responseLength)
: null;
}
// At this point we should have just the single handshake message
final messages = TextMessageFormat.parse(_messageData);
final response = HandshakeResponseMessageExtensions.fromJson(
json.decode(messages[0]) as Map<String, dynamic>);
// if (response.type) {
// throw new Error("Expected a handshake response from the server.");
// }
_responseMessage = response;
return Tuple2<dynamic, HandshakeResponseMessage>(
_remainingData,
_responseMessage,
);
}