st-ethernet-ip
Version:
A simple node interface for Ethernet/IP.
56 lines (55 loc) • 2.26 kB
JavaScript
const Scanner = require("../udp");
const scanner = new Scanner(parseInt(process.argv[2]), process.argv[3]);
let connMap = {};
if (process.on) {
process.on('SIGINT', () => {
//Don't Exit
});
process.on('message', mess => {
switch (mess.type) {
case 'newConnection':
if (mess.data.config.configInstance.data) {
mess.data.config.configInstance.data = Buffer.from(mess.data.config.configInstance.data);
}
let conn = scanner.addConnection(mess.data.config, mess.data.rpi, mess.data.address, mess.data.port);
connMap[mess.address] = conn;
conn.inputDataLast = Buffer.alloc(conn.TOsize);
conn.lastConnected = false;
conn.inputInterval = setInterval(() => {
if (Buffer.compare(conn.inputDataLast, conn.inputData) !== 0) {
conn.inputData.copy(conn.inputDataLast);
process.send({
type: 'inputData',
data: conn.inputData,
address: conn.address
});
}
if (conn.lastConnected !== conn.connected) {
conn.lastConnected = conn.connected;
process.send({
type: 'status',
data: conn.connected,
address: conn.address
});
}
}, conn.rpi);
break;
case 'run':
connMap[mess.address].run = mess.data;
break;
case 'outputData':
connMap[mess.address].outputData = Buffer.from(mess.data);
break;
case 'closeConn':
connMap[mess.address].run = false;
clearInterval(connMap[mess.address].inputInterval);
connMap[mess.address] = null;
break;
case 'closeScanner':
scanner.connections = [];
scanner.socket.close();
process.exit();
break;
}
});
}