import { server } from './site' import socket_io from 'socket.io' const io = socket_io(server) let relay_connected = false export const client = io.of('/client') client.on('connect', bind_client) export const relay = (() => { let relay; if (process.env.EXPRESS_CONNECTS_TO_RELAY === 'true') { console.log('Connecting to relay on ' + process.env.RELAY_REMOTE) relay = require('socket.io-client').connect(process.env.RELAY_REMOTE) bind_relay(relay) } else { relay = io.of('/relay') relay.on('connect', bind_relay) } return relay })() function bind_relay(socket) { console.log('Relay connected') relay_connected = true client.emit('system_res', { type: 'relay_connected' }) socket.on('res', data => { // console.log('Received response', data.cmd) client.emit('res', data) }) socket.on('status', data => { // console.log('Received status', data.key) client.emit('status', data) }) socket.on('system_res', data => { // console.log('System responded', data.type) client.emit('system_res', data) }) socket.on('task_res', data => { client.emit('task_res', data) }) socket.on('frame', (data) => { client.volatile.emit('frame', data) }) socket.on('disconnect', () => { console.log('Relay disconnected') relay_connected = false client.emit('system_res', { type: 'relay_disconnected' }) }) } function bind_client(socket){ console.log('Client connected') if (relay_connected) { socket.emit('system_res', { type: 'relay_connected' }) relay.emit('system', { cmd: 'get_status' }) } else { socket.emit('system_res', { type: 'relay_disconnected' }) } socket.on('cmd', data => { // console.log('Client sent command', data) relay.emit('cmd', data) }) socket.on('system', data => { // console.log('Client sent system command', data) relay.emit('system', data) }) socket.on('task', data => { // console.log('Client sent task command', data) relay.emit('task', data) }) socket.on('disconnect', () => { console.log('Client disconnected') }) }