Skip to content

Instantly share code, notes, and snippets.

@rystaf
Last active August 27, 2017 21:31
Show Gist options
  • Save rystaf/6f4172870e8357c5738428a93a54675d to your computer and use it in GitHub Desktop.
Save rystaf/6f4172870e8357c5738428a93a54675d to your computer and use it in GitHub Desktop.
chat server
var net = require('net')
var sockets = [];
var n = 0
var server = net.Server((socket)=>{
sockets.push(socket)
socket.lastMsg = 0;
socket.name = 'anon'+n++
console.log(socket.name+' joined')
socket.write('Welcome '+socket.name+'! (Commands: /name /list)\n\r')
for (var i = 0; i < sockets.length; i++ ){
if (sockets[i]==socket) continue
sockets[i].write(socket.name+' joined\n\r')
}
socket.on('data',(data)=>{
if ((new Date() - socket.lastMsg) > 500) {
if (data.toString().indexOf("�")){
if (!data.toString().indexOf('/name ')){
var oldName = socket.name
socket.name = data.toString().slice(6).trim()
for (var i = 0; i < sockets.length; i++ ){
sockets[i].write(oldName+' is now known as '+socket.name+'\n\r')
}
socket.lastMsg = new Date()
} else if (!data.toString().indexOf('/list')){
socket.write(sockets.map((x)=>x.name).join(', ')+'\n\r')
} else {
for (var i = 0; i < sockets.length; i++ ){
if (sockets[i]==socket) continue
var name = socket.name || 'P'+i
sockets[i].write(name+': '+data.toString().trim())
sockets[i].write('\n\r')
socket.lastMsg = new Date()
}
}
}
}
})
socket.on('end', ()=>{
var i = sockets.indexOf(socket)
name = socket.name
sockets.splice(i,1)
for (var i = 0; i < sockets.length; i++ ){
sockets[i].write(name+' left\n\r')
}
})
})
server.listen(4444)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment