Minor optimization to set buffer size appropriately

This avoids unnecessary allocations/reallocations while decoding a message by pre-sizing the buffer to the amount we know it will require. I feel like there's probably a better way to handle this, but this works for now.
This commit is contained in:
2020-02-10 21:36:13 -06:00
parent 5a55c56ac1
commit ed99d411b2
8 changed files with 48 additions and 9 deletions

View File

@ -6,7 +6,11 @@ const MSG_ID = 14;
exports.SLChallengeMessage = class SLChallengeMessage extends SLMessage { exports.SLChallengeMessage = class SLChallengeMessage extends SLMessage {
constructor(buf) { constructor(buf) {
super(0, MSG_ID); var size;
if (buf) {
size = buf.readInt32LE(4) + 8;
}
super(0, MSG_ID, size);
if (buf) { if (buf) {
this._wroteSize = true; this._wroteSize = true;

View File

@ -6,7 +6,12 @@ const MSG_ID = 12592;
exports.SLChemDataMessage = class SLChemDataMessage extends SLMessage { exports.SLChemDataMessage = class SLChemDataMessage extends SLMessage {
constructor(buf) { constructor(buf) {
super(0, MSG_ID); var size;
if (buf) {
size = buf.readInt32LE(4) + 8;
}
super(0, MSG_ID, size);
if (!buf) { if (!buf) {
this.writeInt32LE(0); // controller index this.writeInt32LE(0); // controller index
} else { } else {

View File

@ -6,7 +6,12 @@ const MSG_ID = 12532;
exports.SLControllerConfigMessage = class SLControllerConfigMessage extends SLMessage { exports.SLControllerConfigMessage = class SLControllerConfigMessage extends SLMessage {
constructor(buf) { constructor(buf) {
super(0, MSG_ID); var size;
if (buf) {
size = buf.readInt32LE(4) + 8;
}
super(0, MSG_ID, size);
if (!buf) { if (!buf) {
this.writeInt32LE(0); this.writeInt32LE(0);
this.writeInt32LE(0); this.writeInt32LE(0);

View File

@ -6,7 +6,11 @@ const MSG_ID = 18003;
exports.SLGetGatewayDataMessage = class SLGetGatewayDataMessage extends SLMessage { exports.SLGetGatewayDataMessage = class SLGetGatewayDataMessage extends SLMessage {
constructor(buf) { constructor(buf) {
super(0, MSG_ID); var size;
if (buf) {
size = buf.readInt32LE(4) + 8;
}
super(0, MSG_ID, size);
if (typeof buf === 'string') { if (typeof buf === 'string') {
this.writeSLString(buf); this.writeSLString(buf);

View File

@ -3,8 +3,14 @@
const SmartBuffer = require('smart-buffer').SmartBuffer; const SmartBuffer = require('smart-buffer').SmartBuffer;
exports.SLMessage = class SLMessage extends SmartBuffer { exports.SLMessage = class SLMessage extends SmartBuffer {
constructor(senderId, messageId) { constructor(senderId, messageId, size) {
super(); var options;
if (size) {
options = {
size: size,
};
}
super(options);
if (typeof senderId === 'number' || typeof senderId === 'undefined') { if (typeof senderId === 'number' || typeof senderId === 'undefined') {
this.writeUInt16LE(senderId || 0); this.writeUInt16LE(senderId || 0);

View File

@ -9,7 +9,12 @@ const POOL_CIRCUIT_ID = 505;
exports.SLPoolStatusMessage = class SLPoolStatusMessage extends SLMessage { exports.SLPoolStatusMessage = class SLPoolStatusMessage extends SLMessage {
constructor(buf) { constructor(buf) {
super(0, MSG_ID); var size;
if (buf) {
size = buf.readInt32LE(4) + 8;
}
super(0, MSG_ID, size);
if (!buf) { if (!buf) {
this.writeInt32LE(0); this.writeInt32LE(0);
} else { } else {

View File

@ -6,7 +6,12 @@ const MSG_ID = 12572;
exports.SLSaltCellConfigMessage = class SLSaltCellConfigMessage extends SLMessage { exports.SLSaltCellConfigMessage = class SLSaltCellConfigMessage extends SLMessage {
constructor(buf) { constructor(buf) {
super(0, MSG_ID); var size;
if (buf) {
size = buf.readInt32LE(4) + 8;
}
super(0, MSG_ID, size);
if (!buf) { if (!buf) {
this.writeInt32LE(0); // controller index this.writeInt32LE(0); // controller index
} else { } else {

View File

@ -6,7 +6,12 @@ const MSG_ID = 8120;
exports.SLVersionMessage = class SLVersionMessage extends SLMessage { exports.SLVersionMessage = class SLVersionMessage extends SLMessage {
constructor(buf) { constructor(buf) {
super(0, MSG_ID); var size;
if (buf) {
size = buf.readInt32LE(4) + 8;
}
super(0, MSG_ID, size);
if (buf) { if (buf) {
this._wroteSize = true; this._wroteSize = true;
this.writeBuffer(buf, 0); this.writeBuffer(buf, 0);