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