diff --git a/lib/receiver.js b/lib/receiver.js index b9102011a..9d301235f 100644 --- a/lib/receiver.js +++ b/lib/receiver.js @@ -62,7 +62,7 @@ class Receiver extends stream.Writable { * @param {Function} cb Callback */ _write(chunk, encoding, cb) { - if (this._opcode === 0x08) return cb(); + if (this._opcode === 0x08 && this._state == GET_INFO) return cb(); this._bufferedBytes += chunk.length; this._buffers.push(chunk); @@ -454,6 +454,7 @@ class Receiver extends stream.Writable { this.end(); } + this._state = GET_INFO; return; } diff --git a/test/receiver.test.js b/test/receiver.test.js index 6211b31a2..3bc680719 100644 --- a/test/receiver.test.js +++ b/test/receiver.test.js @@ -34,6 +34,19 @@ describe('Receiver', function() { receiver.write(Buffer.from('8800', 'hex')); }); + it('parses a close message spanning multiple writes', function(done) { + const receiver = new Receiver(); + + receiver.on('conclude', (code, data) => { + assert.strictEqual(code, 1000); + assert.strictEqual(data, 'DONE'); + done(); + }); + + receiver.write(Buffer.from('8806', 'hex')); + receiver.write(Buffer.from('03e8444F4E45', 'hex')); + }); + it('parses a masked text message', function(done) { const receiver = new Receiver();