import { execFile, spawn } from 'child_process' export default class Bridge { constructor() { this.cpus = [] this.getDevices() } getDevices() { this.run(['python/devices.py']).then( (stdout, stderr) => { this.devices = JSON.parse(stdout) console.log(this.devices) }).catch( (err) => { console.error('error fetching devices:', err) }) } run(args) { return new Promise( (resolve, reject) => { console.log('>', args.join(' ')) execFile(process.env.PYTHON_BINARY, args, (err, stdout, stderr) => { if (err) return reject(err) return resolve(stdout, stderr) }) }) } monitor(args) { return new Monitor(args) } process(file) { ipc.server.sockets.forEach( (socket) => { console.log('>> sending process') ipc.server.emit(socket, 'process', true) }) } } var ipc = require('node-ipc') ipc.config.id = 'cortex' ipc.config.retry = 1500; ipc.serve( () => { ipc.server.on('connect', (socket) => { console.log('>>> worker connected') ipc.server.emit(socket, 'message', true) }) ipc.server.on('message', (data, socket) => { ipc.log('got a message : '.debug, data); // ipc.server.emit( // socket, // 'message', // data+' world!' // ) }) ipc.server.on( 'socket.disconnected', (socket, destroyedSocketID) => { ipc.log('client ' + destroyedSocketID + ' has disconnected!'); }) }) ipc.server.start()