feat: add relay to slapdash
parent
957599f3a3
commit
a11f5c80e4
@ -0,0 +1,108 @@
|
||||
import ws from 'ws'
|
||||
import { v4 } from 'uuid'
|
||||
|
||||
let relay = null
|
||||
let rl = null
|
||||
|
||||
const connections = {}
|
||||
|
||||
export const sub = []
|
||||
|
||||
let overlayStream = null
|
||||
|
||||
export const state = (data) => {
|
||||
overlayStream = data
|
||||
}
|
||||
|
||||
export const start = () => {
|
||||
console.warn('RELAY SERVER STARTED.')
|
||||
|
||||
relay = new ws.Server({
|
||||
port: 49322,
|
||||
})
|
||||
|
||||
relay.on('connection', handle)
|
||||
|
||||
rl = new ws.WebSocket('ws://localhost:49122')
|
||||
rl.onopen = () => {
|
||||
console.warn('RL connected at ws://localhost:49122');
|
||||
}
|
||||
|
||||
rl.onclose = () => {
|
||||
console.warn('Lost connection to RL, not retrying');
|
||||
if (relay) {
|
||||
stop()
|
||||
}
|
||||
rl = null
|
||||
}
|
||||
|
||||
rl.on('message', (e) => {
|
||||
console.warn('Received event from RL')
|
||||
Object.values(connections).forEach(v => {
|
||||
const d = JSON.parse(e)
|
||||
v.send(JSON.stringify(d));
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
export const stop = () => {
|
||||
console.log('Received relay stop')
|
||||
Object.keys(connections).forEach((k) => {
|
||||
delete connections[k]
|
||||
})
|
||||
relay.close(() => {
|
||||
relay = null
|
||||
})
|
||||
console.warn('RELAY SERVER CLOSED')
|
||||
}
|
||||
|
||||
export const status = () => {
|
||||
if (relay !== null)
|
||||
return true
|
||||
return false
|
||||
}
|
||||
|
||||
export const sendAll = () => {
|
||||
Object.values(connections).forEach(v => {
|
||||
sendData(v)
|
||||
})
|
||||
}
|
||||
|
||||
const handle = (w) => {
|
||||
console.warn('NEW RELAY CONNECTION')
|
||||
const id = v4()
|
||||
connections[id] = w
|
||||
|
||||
sendData(w)
|
||||
|
||||
w.on('message', msg => console.log(msg))
|
||||
|
||||
w.on('close', () => {
|
||||
delete connections[id]
|
||||
})
|
||||
}
|
||||
|
||||
const onMsg = (msg, id) => {
|
||||
const d = JSON.parse(msg)
|
||||
if (d.hasOwnProperty('event')) {
|
||||
if (d.event === 'read') {
|
||||
sendData(connections[id])
|
||||
} else if (d.event === 'update') {
|
||||
console.warn('RECEIVED UPDATE')
|
||||
sub.forEach(x => {
|
||||
x(d.data)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const sendData = (w) => {
|
||||
console.log('SENDING DATA')
|
||||
if (overlayStream !== null) {
|
||||
console.log(overlayStream)
|
||||
w.send(JSON.stringify({
|
||||
event: 'read',
|
||||
data: overlayStream,
|
||||
}))
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue