import { rpc, get_connected } from './rpc' import * as q from './queue' const io = require('socket.io-client') import * as runner from './runner' export const remote = io.connect(process.env.SOCKETIO_REMOTE) export function emit (key, payload) { remote.emit(key, payload) } 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('task', data.type) console.log(data) 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': q.cpu.activate() q.gpu.activate() runner.start_queue() break case 'stop_queue': q.cpu.deactivate() q.gpu.deactivate() 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 'count_directory': runner.count_directory(data.payload, count => { remote.emit('system_res', { type: 'count_directory', dir: data.payload, uuid: data.uuid, count, }) }) 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 'read_file': runner.read_file(data.payload, (file) => { remote.emit('system_res', { type: 'read_file', query: data.payload, uuid: data.uuid, file, }) }) 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 } })