Files
Node.js-14-Cookbook/Chapter05/communicating-with-websockets/websocket-client/index.js
T
2017-07-31 11:33:31 +05:30

39 lines
1.0 KiB
JavaScript

'use strict'
const WebSocket = require('ws')
const readline = require('readline')
const ws = new WebSocket(process.argv[2] || 'ws://localhost:8080')
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
prompt: '-> '
})
const gray = '\u001b[90m'
const red = '\u001b[31m'
const reset = '\u001b[39m'
ws.on('open', () => {
rl.output.write(`${gray}-- Connected --${reset}\n\n`)
rl.prompt()
})
rl.on('line', (msg) => {
ws.send(msg, () => {
rl.output.write(`${gray}<= ${msg}${reset}\n\n`)
rl.prompt()
})
})
ws.on('message', function (msg) {
readline.clearLine(rl.output)
readline.moveCursor(rl.output, -3 - rl.line.length, -1)
rl.output.write(`${gray}=> ${msg}${reset}\n\n`)
rl.prompt(true)
})
ws.on('close', () => {
readline.cursorTo(rl.output, 0)
rl.output.write(`${gray}-- Disconnected --${reset}\n\n`)
process.exit()
})
ws.on('error', (err) => {
readline.cursorTo(rl.output, 0)
rl.output.write(`${red}-- Error --${reset}\n`)
rl.output.write(`${red}${err.stack}${reset}\n`)
})