| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- // Copyright (c) .NET Foundation. All rights reserved.
- // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
- import { TextMessageFormat } from "./TextMessageFormat";
- import { isArrayBuffer } from "./Utils";
- /** @private */
- var HandshakeProtocol = /** @class */ (function () {
- function HandshakeProtocol() {
- }
- // Handshake request is always JSON
- HandshakeProtocol.prototype.writeHandshakeRequest = function (handshakeRequest) {
- return TextMessageFormat.write(JSON.stringify(handshakeRequest));
- };
- HandshakeProtocol.prototype.parseHandshakeResponse = function (data) {
- var responseMessage;
- var messageData;
- var remainingData;
- if (isArrayBuffer(data) || (typeof Buffer !== "undefined" && data instanceof Buffer)) {
- // Format is binary but still need to read JSON text from handshake response
- var binaryData = new Uint8Array(data);
- var separatorIndex = binaryData.indexOf(TextMessageFormat.RecordSeparatorCode);
- if (separatorIndex === -1) {
- throw new Error("Message is incomplete.");
- }
- // content before separator is handshake response
- // optional content after is additional messages
- var responseLength = separatorIndex + 1;
- messageData = String.fromCharCode.apply(null, binaryData.slice(0, responseLength));
- remainingData = (binaryData.byteLength > responseLength) ? binaryData.slice(responseLength).buffer : null;
- }
- else {
- var textData = data;
- var separatorIndex = textData.indexOf(TextMessageFormat.RecordSeparator);
- if (separatorIndex === -1) {
- throw new Error("Message is incomplete.");
- }
- // content before separator is handshake response
- // optional content after is additional messages
- var 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
- var messages = TextMessageFormat.parse(messageData);
- var response = JSON.parse(messages[0]);
- if (response.type) {
- throw new Error("Expected a handshake response from the server.");
- }
- 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];
- };
- return HandshakeProtocol;
- }());
- export { HandshakeProtocol };
- //# sourceMappingURL=HandshakeProtocol.js.map
|