Removed debug logging
Added verification of broadcast response message size Added clearer handling of message types I'm sure there's a better way to do debug logging, but I don't really feel like adding a dependency on another module just for that.
This commit is contained in:
115
index.js
115
index.js
@ -11,7 +11,7 @@ class FindUnits extends EventEmitter {
|
||||
this.finder.on('message', function (message, remote) {
|
||||
_this.foundServer(message, remote);
|
||||
}).on('close', function() {
|
||||
console.log('finder closed');
|
||||
//console.log('finder closed');
|
||||
});
|
||||
}
|
||||
|
||||
@ -25,19 +25,21 @@ class FindUnits extends EventEmitter {
|
||||
}
|
||||
|
||||
foundServer(message, remote) {
|
||||
console.log('Found something');
|
||||
var server = {
|
||||
address: remote.address,
|
||||
type: message.readInt32LE(0),
|
||||
port: message.readInt16LE(8),
|
||||
gatewayType: message.readUInt8(10),
|
||||
gatewaySubtype: message.readUInt8(11),
|
||||
gatewayName: message.toString('utf8', 12, 28)
|
||||
};
|
||||
//console.log('Found something');
|
||||
if (message.length >= 40) {
|
||||
var server = {
|
||||
address: remote.address,
|
||||
type: message.readInt32LE(0),
|
||||
port: message.readInt16LE(8),
|
||||
gatewayType: message.readUInt8(10),
|
||||
gatewaySubtype: message.readUInt8(11),
|
||||
gatewayName: message.toString('utf8', 12, 28)
|
||||
};
|
||||
|
||||
console.log(' type: ' + server.type + ', host: ' + server.address + ':' + server.port + ', identified as ' + server.gatewayName);
|
||||
if (server.type === 2) {
|
||||
this.emit('serverFound', server);
|
||||
//console.log(' type: ' + server.type + ', host: ' + server.address + ':' + server.port + ', identified as ' + server.gatewayName);
|
||||
if (server.type === 2) {
|
||||
this.emit('serverFound', server);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -45,7 +47,7 @@ class FindUnits extends EventEmitter {
|
||||
var message = new Uint8Array(8);
|
||||
message[0] = 1;
|
||||
this.finder.send(message, 0, message.length, 1444, "255.255.255.255");
|
||||
console.log("Looking for ScreenLogic hosts...");
|
||||
//console.log("Looking for ScreenLogic hosts...");
|
||||
}
|
||||
|
||||
close() {
|
||||
@ -63,7 +65,7 @@ class UnitConnection extends EventEmitter {
|
||||
this.client.on('data', function(msg) {
|
||||
_this.onClientMessage(msg);
|
||||
}).on('close', function(had_error) {
|
||||
console.log('unit connection closed');
|
||||
//console.log('unit connection closed');
|
||||
});
|
||||
}
|
||||
|
||||
@ -72,7 +74,7 @@ class UnitConnection extends EventEmitter {
|
||||
}
|
||||
|
||||
connect() {
|
||||
console.log("connecting...");
|
||||
//console.log("connecting...");
|
||||
var _this = this;
|
||||
this.client.connect(this.server.port, this.server.address, function() {
|
||||
_this.onConnected();
|
||||
@ -80,78 +82,91 @@ class UnitConnection extends EventEmitter {
|
||||
}
|
||||
|
||||
onConnected() {
|
||||
console.log('connected');
|
||||
//console.log('connected');
|
||||
|
||||
console.log('sending init message...');
|
||||
//console.log('sending init message...');
|
||||
this.client.write('CONNECTSERVERHOST\r\n\r\n');
|
||||
|
||||
console.log('sending challenge message...');
|
||||
//console.log('sending challenge message...');
|
||||
this.client.write(new messages.SLChallengeMessage().toBuffer());
|
||||
}
|
||||
|
||||
login() {
|
||||
console.log('sending login message...');
|
||||
//console.log('sending login message...');
|
||||
this.client.write(new messages.SLLoginMessage().toBuffer());
|
||||
}
|
||||
|
||||
getPoolStatus() {
|
||||
console.log('sending pool status query...');
|
||||
//console.log('sending pool status query...');
|
||||
this.client.write(new messages.SLPoolStatusMessage().toBuffer());
|
||||
}
|
||||
|
||||
getControllerConfig() {
|
||||
console.log('sending controller config query...');
|
||||
//console.log('sending controller config query...');
|
||||
this.client.write(new messages.SLControllerConfigMessage().toBuffer());
|
||||
}
|
||||
|
||||
getChemicalData() {
|
||||
console.log('sending chemical data query...');
|
||||
//console.log('sending chemical data query...');
|
||||
this.client.write(new messages.SLChemDataMessage().toBuffer());
|
||||
}
|
||||
|
||||
getSaltCellConfig() {
|
||||
console.log('sending salt cell config query...');
|
||||
//console.log('sending salt cell config query...');
|
||||
this.client.write(new messages.SLSaltCellConfigMessage().toBuffer());
|
||||
}
|
||||
|
||||
getVersion() {
|
||||
console.log('sending version query...');
|
||||
//console.log('sending version query...');
|
||||
this.client.write(new messages.SLVersionMessage().toBuffer());
|
||||
}
|
||||
|
||||
onClientMessage(msg) {
|
||||
console.log('received message of length ' + msg.length);
|
||||
//console.log('received message of length ' + msg.length);
|
||||
if (msg.length < 4) {
|
||||
return;
|
||||
}
|
||||
|
||||
var msgType = msg.readInt16LE(2);
|
||||
if (msgType === 15) {
|
||||
console.log(" it's a challenge response");
|
||||
this.login();
|
||||
} else if (msgType === 28) {
|
||||
console.log(" it's a login response");
|
||||
this.emit('loggedIn');
|
||||
} else if (msgType === 12527) {
|
||||
console.log(" it's pool status");
|
||||
this.emit('poolStatus', new messages.SLPoolStatusMessage(msg));
|
||||
} else if (msgType === 12533) {
|
||||
console.log(" it's controller configuration");
|
||||
this.emit('controllerConfig', new messages.SLControllerConfigMessage(msg));
|
||||
} else if (msgType === 12593) {
|
||||
console.log(" it's chem data");
|
||||
this.emit('chemicalData', new messages.SLChemDataMessage(msg));
|
||||
} else if (msgType === 12573) {
|
||||
console.log(" it's salt cell config");
|
||||
this.emit('saltCellConfig', new messages.SLSaltCellConfigMessage(msg));
|
||||
} else if (msgType === 8121) {
|
||||
console.log(" it's version");
|
||||
this.emit('version', new messages.SLVersionMessage(msg));
|
||||
} else {
|
||||
console.log(" it's unknown. type: " + msgType);
|
||||
switch (msgType) {
|
||||
case messages.SLChallengeMessage.getResponseId():
|
||||
//console.log(" it's a challenge response");
|
||||
this.login();
|
||||
break;
|
||||
case messages.SLLoginMessage.getResponseId():
|
||||
//console.log(" it's a login response");
|
||||
this.emit('loggedIn');
|
||||
break;
|
||||
case messages.SLPoolStatusMessage.getResponseId():
|
||||
//console.log(" it's pool status");
|
||||
this.emit('poolStatus', new messages.SLPoolStatusMessage(msg));
|
||||
break;
|
||||
case messages.SLControllerConfigMessage.getResponseId():
|
||||
//console.log(" it's controller configuration");
|
||||
this.emit('controllerConfig', new messages.SLControllerConfigMessage(msg));
|
||||
break;
|
||||
case messages.SLChemDataMessage.getResponseId():
|
||||
//console.log(" it's chem data");
|
||||
this.emit('chemicalData', new messages.SLChemDataMessage(msg));
|
||||
break;
|
||||
case messages.SLSaltCellConfigMessage.getResponseId():
|
||||
//console.log(" it's salt cell config");
|
||||
this.emit('saltCellConfig', new messages.SLSaltCellConfigMessage(msg));
|
||||
break;
|
||||
case messages.SLVersionMessage.getResponseId():
|
||||
//console.log(" it's version");
|
||||
this.emit('version', new messages.SLVersionMessage(msg));
|
||||
break;
|
||||
default:
|
||||
//console.log(" it's unknown. type: " + msgType);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* debug print full buffer contents:
|
||||
for (const value of buf.values()) {
|
||||
console.log(value.toString(16));
|
||||
//console.log(value.toString(16));
|
||||
}
|
||||
*/
|
||||
|
||||
|
@ -1,7 +1,13 @@
|
||||
const SLMessage = require('./SLMessage.js').SLMessage;
|
||||
|
||||
const MSG_ID = 14;
|
||||
|
||||
exports.SLChallengeMessage = class SLChallengeMessage extends SLMessage {
|
||||
constructor() {
|
||||
super(0, 14);
|
||||
super(0, MSG_ID);
|
||||
}
|
||||
|
||||
static getResponseId() {
|
||||
return MSG_ID + 1;
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,10 @@
|
||||
const SLMessage = require('./SLMessage.js').SLMessage;
|
||||
|
||||
const MSG_ID = 12592;
|
||||
|
||||
exports.SLChemDataMessage = class SLChemDataMessage extends SLMessage {
|
||||
constructor(buf) {
|
||||
super(0, 12592);
|
||||
super(0, MSG_ID);
|
||||
if (!buf) {
|
||||
this.writeInt32LE(0); // controller index
|
||||
} else {
|
||||
@ -45,4 +47,8 @@ exports.SLChemDataMessage = class SLChemDataMessage extends SLMessage {
|
||||
this.error = (salt & 128) !== 0;
|
||||
}
|
||||
}
|
||||
|
||||
static getResponseId() {
|
||||
return MSG_ID + 1;
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,10 @@
|
||||
const SLMessage = require('./SLMessage.js').SLMessage;
|
||||
|
||||
const MSG_ID = 12532;
|
||||
|
||||
exports.SLControllerConfigMessage = class SLControllerConfigMessage extends SLMessage {
|
||||
constructor(buf) {
|
||||
super(0, 12532);
|
||||
super(0, MSG_ID);
|
||||
if (!buf) {
|
||||
this.writeInt32LE(0);
|
||||
this.writeInt32LE(0);
|
||||
@ -74,4 +76,8 @@ exports.SLControllerConfigMessage = class SLControllerConfigMessage extends SLMe
|
||||
this.interfaceTabFlags = this.readInt32LE();
|
||||
this.showAlarms = this.readInt32LE();
|
||||
}
|
||||
|
||||
static getResponseId() {
|
||||
return MSG_ID + 1;
|
||||
}
|
||||
}
|
||||
|
@ -1,12 +1,18 @@
|
||||
const SLMessage = require('./SLMessage.js').SLMessage;
|
||||
|
||||
const MSG_ID = 27;
|
||||
|
||||
exports.SLLoginMessage = class SLLoginMessage extends SLMessage {
|
||||
constructor() {
|
||||
super(0, 27);
|
||||
super(0, MSG_ID);
|
||||
this.writeInt32LE(348); // schema
|
||||
this.writeInt32LE(0); // connection type
|
||||
this.writeSLString('node-screenlogic'); // version
|
||||
this.writeSLBuffer(Buffer.alloc(16)); // encoded password. empty/unused for local connections
|
||||
this.writeInt32LE(2); // procID
|
||||
}
|
||||
|
||||
static getResponseId() {
|
||||
return MSG_ID + 1;
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,13 @@
|
||||
const SLMessage = require('./SLMessage.js').SLMessage;
|
||||
|
||||
const MSG_ID = 12526;
|
||||
|
||||
const SPA_CIRCUIT_ID = 500;
|
||||
const POOL_CIRCUIT_ID = 505;
|
||||
|
||||
exports.SLPoolStatusMessage = class SLPoolStatusMessage extends SLMessage {
|
||||
constructor(buf) {
|
||||
super(0, 12526);
|
||||
super(0, MSG_ID);
|
||||
if (!buf) {
|
||||
this.writeInt32LE(0);
|
||||
} else {
|
||||
@ -98,4 +100,8 @@ exports.SLPoolStatusMessage = class SLPoolStatusMessage extends SLMessage {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static getResponseId() {
|
||||
return MSG_ID + 1;
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,10 @@
|
||||
const SLMessage = require('./SLMessage.js').SLMessage;
|
||||
|
||||
const MSG_ID = 12572;
|
||||
|
||||
exports.SLSaltCellConfigMessage = class SLSaltCellConfigMessage extends SLMessage {
|
||||
constructor(buf) {
|
||||
super(0, 12572);
|
||||
super(0, MSG_ID);
|
||||
if (!buf) {
|
||||
this.writeInt32LE(0); // controller index
|
||||
} else {
|
||||
@ -24,4 +26,8 @@ exports.SLSaltCellConfigMessage = class SLSaltCellConfigMessage extends SLMessag
|
||||
this.flags = this.readInt32LE();
|
||||
this.superChlorTimer = this.readInt32LE();
|
||||
}
|
||||
|
||||
static getResponseId() {
|
||||
return MSG_ID + 1;
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,10 @@
|
||||
const SLMessage = require('./SLMessage.js').SLMessage;
|
||||
|
||||
const MSG_ID = 8120;
|
||||
|
||||
exports.SLVersionMessage = class SLVersionMessage extends SLMessage {
|
||||
constructor(buf) {
|
||||
super(0, 8120);
|
||||
super(0, MSG_ID);
|
||||
if (buf) {
|
||||
this._wroteSize = true;
|
||||
this.writeBuffer(buf, 0);
|
||||
@ -16,4 +18,8 @@ exports.SLVersionMessage = class SLVersionMessage extends SLMessage {
|
||||
|
||||
this.version = this.readSLString();
|
||||
}
|
||||
|
||||
static getResponseId() {
|
||||
return MSG_ID + 1;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user