You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
1.6 KiB
38 lines
1.6 KiB
"use strict"; |
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
exports.decodePayload = exports.decodePacket = exports.encodePayload = exports.encodePacket = exports.protocol = void 0; |
|
const encodePacket_js_1 = require("./encodePacket.js"); |
|
exports.encodePacket = encodePacket_js_1.default; |
|
const decodePacket_js_1 = require("./decodePacket.js"); |
|
exports.decodePacket = decodePacket_js_1.default; |
|
const SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text |
|
const encodePayload = (packets, callback) => { |
|
// some packets may be added to the array while encoding, so the initial length must be saved |
|
const length = packets.length; |
|
const encodedPackets = new Array(length); |
|
let count = 0; |
|
packets.forEach((packet, i) => { |
|
// force base64 encoding for binary packets |
|
(0, encodePacket_js_1.default)(packet, false, encodedPacket => { |
|
encodedPackets[i] = encodedPacket; |
|
if (++count === length) { |
|
callback(encodedPackets.join(SEPARATOR)); |
|
} |
|
}); |
|
}); |
|
}; |
|
exports.encodePayload = encodePayload; |
|
const decodePayload = (encodedPayload, binaryType) => { |
|
const encodedPackets = encodedPayload.split(SEPARATOR); |
|
const packets = []; |
|
for (let i = 0; i < encodedPackets.length; i++) { |
|
const decodedPacket = (0, decodePacket_js_1.default)(encodedPackets[i], binaryType); |
|
packets.push(decodedPacket); |
|
if (decodedPacket.type === "error") { |
|
break; |
|
} |
|
} |
|
return packets; |
|
}; |
|
exports.decodePayload = decodePayload; |
|
exports.protocol = 4;
|
|
|