writeInt32(value) { this.ensureAvailable(INT32_SIZE) this.buf.writeInt32BE(value, this.offset) this.offset += INT32_SIZE return this }
writeInt64(value) { this.ensureAvailable(INT64_SIZE) const longValue = Long.fromValue(value) this.buf.writeInt32BE(longValue.getHighBits(), this.offset) this.buf.writeInt32BE(longValue.getLowBits(), this.offset + INT32_SIZE) this.offset += INT64_SIZE return this }
header.writeInt32BE(data.length + HEADER_SIZE, 1); header.writeInt8(type, 5); const crc = header[1] ^ header[2] ^ header[3] ^ header[4] ^ header[5];
const calculatedCrc = crc(buffer.slice(0, payload.length + 16)) & 0xFFFFFFFF; buffer.writeInt32BE(calculatedCrc, payload.length + 16); buffer.writeUInt32BE(0x0000AA55, payload.length + 20);
client.connect(3001, '127.0.0.1', () => { console.log('Connected'); const buffer = Buffer.alloc(6); buffer.writeInt32BE(6, 0); buffer.writeInt16BE(1525, 4); client.write(buffer); });
const encodeFrame = (frame) => { if (frame.payload.length + 1 > MAX_PACKET_SIZE) { throw new exceptions.RequestPayloadTooLargeException(); } const buf = Buffer.alloc(HEADER_SIZE_BYTES); buf.writeInt32BE(frame.payload.length + 1, 0); buf.writeInt8(frame.operation.asMap(), LENGTH_FIELD_SIZE_BYTES); return { header: buf, payload: frame.payload }; }
const intToBuffer = (i, length = 4) => { const buf = Buffer.alloc(length); if (length === 4) { buf.writeInt32BE(i, 0); } else if (length === 1) { buf.writeInt8(i, 0); } else { throw new Error('Illegal value specified for intToBuffer length. Must be 1 or 4.'); } return buf; }
it("Test single message", function () { var currentMessage = {remainingSize: 0, parts: [], partialSize: {size: 0, parts: []}}; var buffer = new Buffer(14); var messages = []; buffer.writeInt32BE(10, 0); buffer.write("0123456789", 4); var parsingContext = { offset: 0, currentMessage: currentMessage, data: buffer, onMsgCB:function(message){ messages.push(message); } }; protocol.parseData(parsingContext); expect(messages.length).to.equal(1); expect(messages[0].toString()).to.equal("0123456789"); expect(parsingContext.offset).to.equal(buffer.length); });
function create(path, baseIndex, byteOffset) { assert.string(path, 'path'); assert.optionalNumber(baseIndex, 'baseIndex'); assert.optionalNumber(byteOffset, 'byteOffset'); if (baseIndex === undefined) { baseIndex = 0; } if (byteOffset === undefined) { byteOffset = 0; } let data = allocFill(HLEN + SIZEOF_INT); data.write(MARKER, 'ascii'); data.writeInt32BE(baseIndex, OFS_BASEINDEX, true); data.writeInt32BE(baseIndex, OFS_HEAD, true); data.writeInt32BE(DEF_COMMIT, OFS_COMMIT, true); data.writeInt32BE(byteOffset, HLEN, true); return RandomAccessFile.create(path) .then(file => file.write(OFS_MARKER, data) .then(() => new LogIndexFile(file).open())); }
increment(offset) { assert.ok(this[$header], 'index must be open'); // write the offset into the next index location (typically at EOF), // then update and write the header reference, which completes the // increment. let header = this[$header]; let current = this.head; let next = current + 1; let ofs = HLEN + (this.localizeIndex(next) * SIZEOF_INT); let data = allocFill(SIZEOF_INT); data.writeInt32BE(offset, 0, SIZEOF_INT); return this[$file].write(ofs, data) .then(() => { header.writeInt32BE(next, OFS_HEAD, SIZEOF_INT); return this[$file].write(OFS_HEAD, header, OFS_HEAD, SIZEOF_INT); }) .then(() => { return current; }); }
it("Test multiple messages", function () { var currentMessage = {remainingSize: 0, parts: [], partialSize: {size: 0, parts: []}}; var buffer = new Buffer(27); var messages = []; buffer.writeInt32BE(10, 0); buffer.write("0123456789", 4); buffer.writeInt32BE(9, 14); buffer.write("abcdefghi", 18); var parsingContext = { offset: 0, currentMessage: currentMessage, data: buffer, onMsgCB:function(message){ messages.push(message); } }; protocol.parseData(parsingContext); expect(messages.length).to.equal(2); expect(messages[0].toString()).to.equal("0123456789"); expect(messages[1].toString()).to.equal("abcdefghi"); expect(parsingContext.offset).to.equal(buffer.length); });
function create(path, baseIndex, byteOffset) { _assertPlus2.default.string(path, 'path'); _assertPlus2.default.optionalNumber(baseIndex, 'baseIndex'); _assertPlus2.default.optionalNumber(byteOffset, 'byteOffset'); if (baseIndex === undefined) { baseIndex = 0; } if (byteOffset === undefined) { byteOffset = 0; } var data = allocFill(HLEN + SIZEOF_INT); data.write(MARKER, 'ascii'); data.writeInt32BE(baseIndex, OFS_BASEINDEX, true); data.writeInt32BE(baseIndex, OFS_HEAD, true); data.writeInt32BE(DEF_COMMIT, OFS_COMMIT, true); data.writeInt32BE(byteOffset, HLEN, true); return _ranfile2.default.create(path).then(function (file) { return file.write(OFS_MARKER, data).then(function () { return new LogIndexFile(file).open(); }); }); }
function encode(map) { const buffers = []; for (const key in map) { const keyLengthBuffer = Buffer.alloc(4); if (key) { const keyBuffer = Buffer.from(key); keyLengthBuffer.writeInt32BE(keyBuffer.length); buffers.push(keyLengthBuffer); buffers.push(keyBuffer); } else { keyLengthBuffer.writeInt32BE(0); buffers.push(keyLengthBuffer); } const value = map[key]; const valueLengthBuffer = Buffer.alloc(4); if (value) { const valueBuffer = Buffer.from(value); valueLengthBuffer.writeInt32BE(valueBuffer.length); buffers.push(valueLengthBuffer); buffers.push(valueBuffer); } else { // https://github.com/alipay/sofa-rpc/blob/9a014c76d656a9950d231d2430c4119e1b7d73be/extension-impl/remoting-bolt/src/main/java/com/alipay/sofa/rpc/codec/bolt/SimpleMapSerializer.java#L100 valueLengthBuffer.writeInt32BE(value == null ? -1 : 0); buffers.push(valueLengthBuffer); } } return Buffer.concat(buffers); }
/** * Write an integer to the source buffer. * * @param value data to write */ writeInt(value) { const buf = Buffer.alloc(4); buf.writeInt32BE(value); this.write(buf); }
it("Test partial message update current message", function () { var currentMessage = {remainingSize: 0, parts: [], partialSize: {size: 0, parts: []}}; var buffer = new Buffer(14); var messages = []; buffer.writeInt32BE(15, 0); buffer.write("0123456789", 4); var parsingContext = { offset: 0, currentMessage: currentMessage, data: buffer, onMsgCB:function(message){ messages.push(message); } }; protocol.parseData(parsingContext); expect(messages.length).to.equal(0); expect(currentMessage.remainingSize).to.equal(5); expect(parsingContext.offset).to.equal(buffer.length); });