Initial working version
This commit is contained in:
+38
@@ -0,0 +1,38 @@
|
||||
"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;
|
||||
Reference in New Issue
Block a user