123456789101112131415161718192021222324252627282930313233343536373839404142 |
- const encodePacket = require("./encodePacket");
- const decodePacket = require("./decodePacket");
- 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
- encodePacket(packet, false, encodedPacket => {
- encodedPackets[i] = encodedPacket;
- if (++count === length) {
- callback(encodedPackets.join(SEPARATOR));
- }
- });
- });
- };
- const decodePayload = (encodedPayload, binaryType) => {
- const encodedPackets = encodedPayload.split(SEPARATOR);
- const packets = [];
- for (let i = 0; i < encodedPackets.length; i++) {
- const decodedPacket = decodePacket(encodedPackets[i], binaryType);
- packets.push(decodedPacket);
- if (decodedPacket.type === "error") {
- break;
- }
- }
- return packets;
- };
- module.exports = {
- protocol: 4,
- encodePacket,
- encodePayload,
- decodePacket,
- decodePayload
- };
|