Skip to content

Commit 5aecaa9

Browse files
jmdarrachequesne
jm
authored andcommitted
[fix] decodePacket now accepts both Buffer and ArrayBuffer as data
Closes #64, fixes #60
1 parent 1ae44c9 commit 5aecaa9

File tree

2 files changed

+30
-6
lines changed

2 files changed

+30
-6
lines changed

lib/index.js

+8-6
Original file line numberDiff line numberDiff line change
@@ -146,12 +146,14 @@ exports.decodePacket = function (data, binaryType, utf8decode) {
146146

147147
// Binary data
148148
if (binaryType === 'arraybuffer') {
149-
var type = data[0];
150-
var intArray = new Uint8Array(data.length - 1);
151-
for (var i = 1; i < data.length; i++) {
152-
intArray[i - 1] = data[i];
153-
}
154-
return { type: packetslist[type], data: intArray.buffer };
149+
// wrap Buffer/ArrayBuffer data into an Uint8Array
150+
var intArray = new Uint8Array(data);
151+
var type = intArray[0];
152+
return { type: packetslist[type], data: intArray.buffer.slice(1) };
153+
}
154+
155+
if (data instanceof ArrayBuffer) {
156+
data = arrayBufferToBuffer(data);
155157
}
156158
var type = data[0];
157159
return { type: packetslist[type], data: data.slice(1) };

test/node/index.js

+22
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,28 @@ describe('parser', function() {
130130
});
131131
});
132132

133+
it('should decode an ArrayBuffer as binary', function() {
134+
var arrayBuffer = new ArrayBuffer(4);
135+
var dataview = new DataView(arrayBuffer);
136+
for (var i = 0; i < arrayBuffer.byteLength ; i++) dataview.setInt8(i, 4 - i);
137+
138+
var decoded = decode(arrayBuffer, 'arraybuffer');
139+
var expectedOutput = arrayBuffer.slice(1);
140+
expect(decoded).to.eql({ type: 'message', data: expectedOutput });
141+
expect(new Uint8Array(decoded.data)).to.eql(new Uint8Array(expectedOutput));
142+
});
143+
144+
it('should decode an ArrayBuffer without specifying binaryType', function() {
145+
var buffer = new ArrayBuffer(4);
146+
var dataview = new DataView(buffer);
147+
for (var i = 0; i < buffer.byteLength ; i++) dataview.setInt8(i, 4 - i);
148+
149+
var decoded = decode(buffer);
150+
var expectedOutput = new Buffer([3,2,1]);
151+
expect(decoded).to.eql({ type: 'message', data: expectedOutput });
152+
expect(new Uint8Array(decoded.data)).to.eql(new Uint8Array(expectedOutput));
153+
});
154+
133155
});
134156

135157
function areArraysEqual(x, y) {

0 commit comments

Comments
 (0)