parseHandshakeResponse method

(dynamic, HandshakeResponseMessage) parseHandshakeResponse(
  1. dynamic data
)

Implementation

(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 (
    remainingData,
    responseMessage,
  );
}