12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- "use strict";
- // Licensed to the .NET Foundation under one or more agreements.
- // The .NET Foundation licenses this file to you under the MIT license.
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.HandshakeProtocol = void 0;
- const TextMessageFormat_1 = require("./TextMessageFormat");
- const Utils_1 = require("./Utils");
- /** @private */
- class HandshakeProtocol {
- // Handshake request is always JSON
- writeHandshakeRequest(handshakeRequest) {
- return TextMessageFormat_1.TextMessageFormat.write(JSON.stringify(handshakeRequest));
- }
- parseHandshakeResponse(data) {
- let messageData;
- let remainingData;
- if (Utils_1.isArrayBuffer(data)) {
- // Format is binary but still need to read JSON text from handshake response
- const binaryData = new Uint8Array(data);
- const separatorIndex = binaryData.indexOf(TextMessageFormat_1.TextMessageFormat.RecordSeparatorCode);
- if (separatorIndex === -1) {
- throw new Error("Message is incomplete.");
- }
- // content before separator is handshake response
- // optional content after is additional messages
- const responseLength = separatorIndex + 1;
- messageData = String.fromCharCode.apply(null, Array.prototype.slice.call(binaryData.slice(0, responseLength)));
- remainingData = (binaryData.byteLength > responseLength) ? binaryData.slice(responseLength).buffer : null;
- }
- else {
- const textData = data;
- const separatorIndex = textData.indexOf(TextMessageFormat_1.TextMessageFormat.RecordSeparator);
- if (separatorIndex === -1) {
- throw new Error("Message is incomplete.");
- }
- // content before separator is handshake response
- // optional content after is additional messages
- const 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
- const messages = TextMessageFormat_1.TextMessageFormat.parse(messageData);
- const response = JSON.parse(messages[0]);
- if (response.type) {
- throw new Error("Expected a handshake response from the server.");
- }
- const responseMessage = response;
- // multiple messages could have arrived with handshake
- // return additional data to be parsed as usual, or null if all parsed
- return [remainingData, responseMessage];
- }
- }
- exports.HandshakeProtocol = HandshakeProtocol;
- //# sourceMappingURL=HandshakeProtocol.js.map
|