wspromisify
Version:
Wraps your WebSockets into Promise-based class with full d.ts typings on client & server
43 lines (38 loc) • 1.23 kB
text/typescript
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 }