UNPKG

wspromisify

Version:

Wraps your WebSockets into Promise-based class with full d.ts typings on client & server

43 lines (38 loc) 1.23 kB
import WebSocket, { WebSocketServer } from 'ws' import {noop} from 'pepka' let server: WebSocketServer|null = null const createServer = (port = 40510) => new Promise<WebSocketServer>((ff, rj) => { if(server) return rj('The server is already running!') server = new WebSocketServer({ port }, () => { server!.on('connection', (socket: WebSocket&{isAlive: boolean}) => { socket.on('message', (rawMessage: string) => { const {id, data} = JSON.parse(rawMessage) let response = '' if(data.shut) { socket.terminate() socket.isAlive = false socket.ping('', false, noop) return null } else if(data.echo) { response = data } socket.send(JSON.stringify({ id, data: response })) return null }) return true }) return ff(server!) }) server.on('', console.log) }) const killServer = async () => new Promise<void>((ff, rj) => { if(server) { for(const socket of server.clients) socket.terminate() server.close(() => { server = null ff() }) } else rj('The server is already down!') }) export { createServer, killServer }