import { rpc, get_connected } from './rpc' import * as q from './queue' const io = require('socket.io-client') const runner = require('./runner') export const remote = io.connect(process.env.SOCKETIO_REMOTE) remote.on('cmd', (data) => { if (! data.cmd) return console.log('malformed param...?') console.log('got', data.cmd) switch (data.cmd) { case 'set_param': if (! data.payload) return rpc.invoke(data.cmd, data.payload.key, data.payload.value, (err, res, more) => { console.log('sent param, got response', res) }) break case 'get_params': case 'get_last_frame': rpc.invoke(data.cmd, (err, res, more) => { console.log('got params', res) remote.emit('res', { cmd: data.cmd, res: res, }) }) break default: rpc.invoke('send_command', data.cmd, data.payload || null, (err, res, more) => { console.log('command:', data.cmd, res) remote.emit('res', { cmd: data.cmd, res: res, }) }) break } }) remote.on('task', (data) => { let queue, response; console.log(data) console.log('task', data.type) switch(data.type) { case 'start': response = runner.run_task(data.task, data.preempt, data.watch) break case 'stop': response = runner.stop_task(data.task, data.sigkill) break case 'add': queue = runner.get_queue(data.task) console.log(queue) queue.add_task(data.task) if (! queue.is_active()) { queue.activate() runner.start_queue() } break case 'remove': queue = q.get_processor(data_task) queue.remove_task(data.task) break case 'start_queue': if (! queue.is_active()) { queue.activate() runner.start_queue() } break case 'stop_queue': queue = q.get_processor(data_task) queue.deactivate('user') break case 'list': queue = q.get_processor(data_task) response = { type: 'list', tasks: queue.list_tasks() } break case 'set_priority': break default: response = { type: 'error', error: 'unknown task command' } break } if (response) { if (response.type) { remote.emit('task_res', response) } else { remote.emit('task_res', { type: data.type, response }) } } }) remote.on('system', (data) => { console.log('system:', data.cmd) // console.log(data) switch(data.cmd) { case 'run_system_command': runner.run_system_command(data.payload, (error, stdout, stderr) => { remote.emit('system_res', { type: 'run_system_command', cmd: data.payload, uuid: data.uuid, error, stdout, stderr }) }) break case 'list_directory': runner.list_directory(data.payload, files => { remote.emit('system_res', { type: 'list_directory', dir: data.payload, uuid: data.uuid, files, }) }) break case 'list_sequences': runner.list_sequences(data.payload, sequences => { remote.emit('system_res', { type: 'list_sequences', dir: data.payload, uuid: data.uuid, sequences, }) }) break case 'upload_file': runner.upload_file(data.payload, (error, stdout, stderr) => { remote.emit('system_res', { type: 'upload_file', query: data.payload, uuid: data.uuid, stdout, }) }) break case 'get_status': remote.emit('system_res', { type: 'relay_status', rpc_connected: get_connected(), uuid: data.uuid, runner: runner.status(), }) break case 'run_script': runner.run_script(data.payload, (error, stdout, stderr) => { remote.emit('system_res', { type: 'run_script', cmd: data.payload, uuid: data.uuid, error, stdout, stderr }) }) break default: remote.emit('system_res', { type: 'error', error: 'unknown system command', }) break } })