62 lines
2.2 KiB
JavaScript
62 lines
2.2 KiB
JavaScript
|
// a remove interface for an interrrupt
|
||
|
// starts a socket on 9000 by default to receive interrupt events
|
||
|
// start a consumer on 9004 to send commends to gpio interrupt
|
||
|
|
||
|
import Base from '@uci/base'
|
||
|
|
||
|
const INTER_HOST = process.env.INTER_HOST || 'sbc'
|
||
|
const INTER_PORT = process.env.INTER_PORT || 9004
|
||
|
const PORT = process.env.PORT || 9000
|
||
|
let processor = new Base({ id:'remote-interrupt-processor', useRootNS:true})
|
||
|
|
||
|
processor.interrupt = async function (packet) {
|
||
|
return new Promise(async (resolve) => {
|
||
|
console.log('=============interrupt occured =======================')
|
||
|
delete packet._header
|
||
|
console.dir({pin:packet.pin,state:packet.state})
|
||
|
let status = await this.send({cmd:'status'})
|
||
|
// console.log('check status', status)
|
||
|
console.log('confirmed state', packet.state, (packet.state=== status[packet.pin] || packet.state===status.state) )
|
||
|
console.log('======================================')
|
||
|
resolve({processed:true})
|
||
|
// console.log('confirm state', (await this.send({cmd:'status'})).state===packet.state)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
processor.reply = async function (packet) {
|
||
|
return new Promise((resolve) => {
|
||
|
// console.log('reply processor from interrupt socket for request', packet._header.request)
|
||
|
// console.dir(packet)
|
||
|
resolve(packet)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
|
||
|
processor.on('connection:socket', async ev => {
|
||
|
console.log(`============connection event to remote socket========== ${ev.socketName}: ${ev.state}`)
|
||
|
if (ev.state ==='connected') {
|
||
|
console.log('============ test by sending fire,status,reset commands ==========')
|
||
|
console.log(await processor.send({cmd:'reset'}))
|
||
|
console.log(await processor.send({cmd:'status'}))
|
||
|
console.log(await processor.send({cmd:'fire'}))
|
||
|
}
|
||
|
})
|
||
|
|
||
|
processor.on('connection:consumer', ev => {
|
||
|
console.log(`==consumer connection===:',${ev.name}:${ev.state}`)
|
||
|
if (ev.state ==='connected') {
|
||
|
console.log('====================ready to receive and process a remote interrupt==================')
|
||
|
}
|
||
|
})
|
||
|
|
||
|
;
|
||
|
(async () => {
|
||
|
|
||
|
processor.addSocket('inter','c','t',{host:INTER_HOST, port:INTER_PORT,initTimeout:60})
|
||
|
processor.addSocket('inters','s','t',{port:PORT})
|
||
|
await processor.socketsInit()
|
||
|
|
||
|
})().catch(err => {
|
||
|
console.error('FATAL: UNABLE TO START SYSTEM!\n',err)
|
||
|
})
|