feat: websocket modules

This commit is contained in:
Roberto Tonino 2021-05-11 21:45:24 +02:00
parent 8c92f78e52
commit 62bdb71ede
5 changed files with 38 additions and 6 deletions

View file

@ -10,12 +10,13 @@ import indexRouter from './routes'
import { normalizePort } from './helpers/port'
import { getErrorCb, getListeningCb } from './helpers/server-callbacks'
import { registerApis } from './routes/api/register'
import { registerWebsocket } from './websocket'
const PORT = normalizePort(process.env.PORT || '6595')
const debug = initDebug('deemix-gui:server')
export const app: Application = express()
const wss = new WsServer({ noServer: true })
export const wss = new WsServer({ noServer: true })
const server = http.createServer(app)
/* === Middlewares === */
@ -35,11 +36,7 @@ if (process.env.NODE_ENV !== 'test') {
server.listen(PORT)
}
wss.on('connection', ws => {
ws.on('message', message => {
console.log('received: %s', message)
})
})
registerWebsocket(wss)
/* === Server callbacks === */
server.on('upgrade', (request, socket, head) => {

View file

@ -2,6 +2,7 @@ import { concat } from 'ramda'
const prependDeemix = concat('[deemix-server]: ')
export const consoleInfo = (errorText: string) => console.info(prependDeemix(errorText))
export const consoleError = (errorText: string) => console.error(prependDeemix(errorText))
export class BadRequestError extends Error {

View file

@ -0,0 +1,22 @@
import { Server as WsServer } from 'ws'
import { consoleError, consoleInfo } from '../helpers/errors'
import wsModules from './modules'
// ? Is this needed?
// ? https://github.com/websockets/ws#how-to-detect-and-close-broken-connections
export const registerWebsocket = (wss: WsServer) => {
wss.on('connection', ws => {
wsModules.forEach(module => {
ws.on(module.eventName, module.cb)
})
})
wss.on('error', () => {
consoleError('An error occurred to the WebSocket server.')
})
wss.on('close', () => {
consoleInfo('Connection to the WebSocket server closed.')
})
}

View file

@ -0,0 +1,9 @@
import { consoleInfo } from '../../helpers/errors'
const eventName = 'message'
const cb = (message: string) => {
consoleInfo(`received: ${message}`)
}
export default { eventName, cb }

View file

@ -0,0 +1,3 @@
import connection from './connection'
export default [connection]