Skip to content

Commit 517024b

Browse files
committed
writer
1 parent fcdb1d5 commit 517024b

File tree

1 file changed

+48
-33
lines changed

1 file changed

+48
-33
lines changed

src/dataWriter.js

Lines changed: 48 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -57,52 +57,67 @@ typesTable[DataTypes.double] = function (value) {
5757
};
5858

5959
typesTable[DataTypes.string] = function (value) {
60-
/*var length;
61-
length = buffer.writeUInt16BE(pointer.offset);
62-
pointer.offset += 2;
63-
buffer.toString('utf8', pointer.offset, pointer.offset + length);
64-
pointer.offset += length;*/
60+
var buffer = new Buffer(value);
61+
var length = buffer.length;
62+
if (length > 0xFFFF) {
63+
throw Error('String too long');
64+
}
65+
66+
var res = new Buffer(2 + length);
67+
res.writeUInt16BE(length, 0);
68+
buffer.copy(res, 2);
69+
70+
return res;
6571
};
6672

6773
typesTable[DataTypes.shortBuffer] = function (value) {
68-
/*var length;
69-
length = buffer.writeUInt16BE(pointer.offset);
70-
pointer.offset += 2;
71-
buffer.slice(pointer.offset, pointer.offset + length);
72-
pointer.offset += length;*/
74+
var length = value.length;
75+
if (length > 0xFFFF) {
76+
throw Error('Buffer too long');
77+
}
78+
79+
var res = new Buffer(2 + length);
80+
res.writeUInt16BE(length, 0);
81+
value.copy(res, 2);
82+
83+
return res;
7384
};
7485

7586
typesTable[DataTypes.buffer] = function (value) {
76-
/* var length;
77-
length = buffer.writeUInt32BE(pointer.offset);
78-
pointer.offset += 4;
79-
buffer.slice(pointer.offset, pointer.offset + length);
80-
pointer.offset += length;*/
81-
};
87+
var length = value.length;
8288

83-
typesTable[DataTypes.struct] = function (pointer, buffer, scheme) {
84-
//return structureWriter(pointer, buffer, scheme);
85-
};
89+
if (length > 0xFFFFFFFF) {
90+
throw Error('Buffer too long');
91+
}
92+
93+
var res = new Buffer(4 + length);
94+
res.writeUInt32BE(length, 0);
95+
value.copy(res, 4);
8696

87-
typesTable[DataTypes.list] = function (pointer, buffer, scheme) {
88-
/* var length = buffer.writeUInt16BE(pointer.offset);
89-
pointer.offset += 2;
97+
return res;
98+
};
9099

91-
[];
92-
while (length--) {
93-
res.push(structureWriter(pointer, buffer, scheme));
94-
}*/
100+
typesTable[DataTypes.struct] = function (value, scheme) {
101+
return structureWriter(value, scheme);
95102
};
96103

97-
var structureWriter = function (pointer, object, scheme) {
98-
if (arguments.length === 2) {
99-
scheme = object;
100-
object = pointer;
101-
pointer = {
102-
offset: 0
103-
};
104+
typesTable[DataTypes.list] = function (value, scheme) {
105+
if (Object.prototype.toString.call(value) !== '[object Array]') {
106+
throw Error('Value is not array.')
104107
}
105108

109+
var res = [];
110+
var lenBuf = new Buffer(2);
111+
var length = value.length;
112+
lenBuf.writeUInt16BE(length,0);
113+
res.push(lenBuf);
114+
for(var i = 0; i < length; i++) {
115+
res.push(structureWriter(value[i], scheme));
116+
}
117+
return Buffer.concat(res);
118+
};
119+
120+
var structureWriter = function (object, scheme) {
106121
var res = [];
107122
if(typeof scheme === 'number') {
108123
res.push(typesTable[scheme](object));

0 commit comments

Comments
 (0)