test/mock/WS.ts   A
last analyzed

Complexity

Total Complexity 5
Complexity/F 0

Size

Lines of Code 43
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 5
eloc 35
mnd 5
bc 5
fnc 0
dl 0
loc 43
rs 10
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
1
2
import WebSocket, { WebSocketServer } from 'ws'
3
import {noop} from 'pepka'
4
5
let server: WebSocketServer|null = null
6
7
const createServer = (port = 40510) => new Promise<WebSocketServer>((ff, rj) => {
8
  if(server) return rj('The server is already running!')
9
  server = new WebSocketServer({ port }, () => {
10
    server!.on('connection', (socket: WebSocket&{isAlive: boolean}) => {
11
      socket.on('message', (rawMessage: string) => {
12
        // console.log({rawMessage: rawMessage.toString()})
13
        const {id, data} = JSON.parse(rawMessage)
14
        let response = ''
15
        if(data.shut) {
16
          socket.terminate()
17
          socket.isAlive = false
18
          socket.ping('', false, noop)
19
          return null
20
        } else if(data.echo) {
21
          response = data
22
        }
23
        socket.send(JSON.stringify({ id, data: response }))
24
        return null
25
      })
26
      return true
27
    })
28
    return ff(server!)
29
  })
30
  server.on('', console.log)
31
})
32
33
const killServer = async () => new Promise<void>((ff, rj) => {
34
  if(server) {
35
    for(const socket of server.clients) socket.terminate()
36
    server.close(() => {
37
      server = null
38
      ff()
39
    })
40
  } else
41
    rj('The server is already down!')
42
  })
43
44
export { createServer, killServer }