'use strict' const net = require('net') let server = null let sockets = [] // cleans the input of carriage return, newline const cleanInput = data => data.toString().replace(/(\r\n|\n|\r)/gm, '') // executed when data is received from a socket const receiveData = (socket, data) => { const cleanData = cleanInput(data) if (cleanData === "@quit") { socket.end('Goodbye!\n') } else { for (let i = 0; i < sockets.length; i++) { if (sockets[i] !== socket) { sockets[i].write(data) } } } } // executed when a socket ends const closeSocket = socket => { const i = sockets.indexOf(socket) if (i != -1) sockets.splice(i, 1) } // callback method executed when a new TCP socket is opened const newSocket = socket => { sockets.push(socket) socket.write('Welcome to the Telnet server!\n') socket.on('data', data => receiveData(socket, data)) socket.on('end', () => closeSocket(socket)) } // create a new server module.exports = (port) => { if (server === null) server = net.createServer(newSocket).listen(port) return server }