diff --git a/lib/index.ts b/lib/index.ts index b3035d3..6b77094 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -288,6 +288,7 @@ export class Decoder extends Emitter<{}, {}, DecoderReservedEvents> { public destroy() { if (this.reconstructor) { this.reconstructor.finishedReconstruction(); + this.reconstructor = null; } } } diff --git a/test/arraybuffer.js b/test/arraybuffer.js index 7103c80..c3db78b 100644 --- a/test/arraybuffer.js +++ b/test/arraybuffer.js @@ -69,27 +69,6 @@ describe("ArrayBuffer", () => { return helpers.test_bin(packet); }); - it("cleans itself up on close", () => { - const packet = { - type: PacketType.EVENT, - data: ["a", new ArrayBuffer(2), new ArrayBuffer(3)], - id: 0, - nsp: "/", - }; - - const encodedPackets = encoder.encode(packet); - - const decoder = new Decoder(); - decoder.on("decoded", (packet) => { - throw new Error("received a packet when not all binary data was sent."); - }); - - decoder.add(encodedPackets[0]); // add metadata - decoder.add(encodedPackets[1]); // add first attachment - decoder.destroy(); // destroy before all data added - expect(decoder.reconstructor.buffers.length).to.be(0); // expect that buffer is clean - }); - it("should not modify the input packet", () => { const packet = { type: PacketType.EVENT, diff --git a/test/parser.js b/test/parser.js index 47836db..1b99166 100644 --- a/test/parser.js +++ b/test/parser.js @@ -127,4 +127,19 @@ describe("socket.io-parser", () => { /^Unknown type: 999$/ ); }); + + it("should resume decoding after calling destroy()", () => { + return new Promise((resolve) => { + const decoder = new Decoder(); + + decoder.on("decoded", (packet) => { + expect(packet.data).to.eql(["hello"]); + resolve(); + }); + + decoder.add('51-["hello"]'); + decoder.destroy(); + decoder.add('2["hello"]'); + }); + }); });