ReportOfflineNodeStatus-add setTimeout, Handle broadcast cmd to rsPort

This commit is contained in:
rasta5man 2024-10-02 18:21:31 +02:00
parent 1c131d0b63
commit ed0fe5b15d
4 changed files with 101 additions and 101 deletions

View file

@ -1,94 +1,101 @@
const { exec } = require('child_process');
function openPort(port){
return new Promise((resolve, reject) => {
return new Promise((resolve, reject) => {
var callbackError = function(err) {
port.removeListener('error', callbackError);
port.removeListener('open', callbackError);
var callbackError = function(err) {
port.removeListener('error', callbackError);
port.removeListener('open', callbackError);
reject(err.message);
};
reject(err.message);
};
var callbackOpen = function(data) {
port.removeListener('error', callbackError);
port.removeListener('open', callbackOpen);
var callbackOpen = function(data) {
port.removeListener('error', callbackError);
port.removeListener('open', callbackOpen);
resolve("port open: ok");
};
resolve("port open: ok");
};
port.on('error', callbackError);
port.on('open', callbackOpen);
port.on('error', callbackError);
port.on('open', callbackOpen);
port.open();
port.open();
})
}
})
}
function runSyncExec(command){
return new Promise((resolve, reject) => {
exec(command, (error, stdout, stderr) => {
if(error == null) resolve(stdout);
reject(error);
});
})
}
function runSyncExec(command){
return new Promise((resolve, reject) => {
async function writeData(port, data, readbytes, timeout){
return new Promise((resolve, reject) => {
exec(command, (error, stdout, stderr) => {
if(error == null) resolve(stdout);
reject(error);
});
//readbytes = 0 = broadcast
if(readbytes == undefined) readbytes = 0;
if(timeout == undefined) timeout = 10000;//10s, default timeout MASTERA je 3s
})
}
//cmd-manager mame http route POST / terminal a tomu sa tiez nastavuje timeout!!!
var callback = function(data) {
rsPortReceivedData.push(...data);
let l = rsPortReceivedData.length;
async function writeData(port, data, readbytes, timeout){
return new Promise((resolve, reject) => {
if(l >= readbytes)
{
port.removeListener('data', callback);
clearTimeout(t);
resolve(rsPortReceivedData);
}
};
port.removeListener('data', callback);
let t = setTimeout(() => {
port.removeListener('data', callback);
console.log("serialport helper: writeData TIMEOUT READING", rsPortReceivedData);
reject("TIMEOUT READING");
}, timeout);
let rsPortReceivedData = [];
if(readbytes > 0) port.on('data', callback);
// If first item in data array is 255, we just write broadcast command to rsPort
// We wait 3 seconds and resolve([ "b", "r", "o", "a", "d", "c", "a", "s", "t" ])
// It is important to resolve with array
if(data[0] == 255) {
port.write(Buffer.from(data), function(err) {
if (err) {
port.removeListener('data', callback);
reject(err.message);
}
if(readbytes == 0)
{
resolve(rsPortReceivedData);
}
});
})
setTimeout(resolve, 3000, [ "b", "r", "o", "a", "d", "c", "a", "s", "t" ]);
return;
}
//cmd-manager mame http route POST / terminal a tomu sa tiez nastavuje timeout!!!
var callback = function(data) {
rsPortReceivedData.push(...data);
let l = rsPortReceivedData.length;
if(l >= readbytes)
{
port.removeListener('data', callback);
clearTimeout(t);
resolve(rsPortReceivedData);
}
};
port.removeListener('data', callback);
let t = setTimeout(() => {
port.removeListener('data', callback);
console.log("serialport helper: writeData TIMEOUT READING", rsPortReceivedData);
reject("TIMEOUT READING");
}, timeout);
let rsPortReceivedData = [];
port.on('data', callback);
port.write(Buffer.from(data), function(err) {
if (err) {
port.removeListener('data', callback);
reject(err.message);
}
});
})
}
module.exports = {
openPort,
runSyncExec,
writeData
}
}