Created
April 6, 2016 02:02
-
-
Save jcarroyo/16a0839d62dd6bbe4da114e0ea48ab0c to your computer and use it in GitHub Desktop.
Chat server and client v2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var net = require('net'); | |
var socket = new net.Socket(); | |
var port = 5000; | |
var host = "127.0.0.1"; | |
var readline = require('readline'); | |
var rl = readline.createInterface({ | |
input: process.stdin, | |
output: process.stdout | |
}); | |
rl.setPrompt("comando>"); | |
socket.connect(port, host, function(){ | |
rl.prompt(); | |
}); | |
socket.setEncoding("utf8"); | |
socket.on('data', function(data){ | |
console.log("respuesta>", data); | |
rl.prompt(); | |
}); | |
rl.on('line', function(line){ | |
socket.write(line); | |
}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var net = require('net'); | |
var port = 5000; | |
var protocolCommands = ['nick', 'broadcast', 'chat', 'list']; | |
var util = require('util'); | |
var listClients = []; | |
var server = net.createServer(function(client){ | |
client.setEncoding("utf8"); | |
processNewClientConnection(client); | |
client.on('data', function(data){ | |
var parts = data.split(":"); | |
var command = parts[0]; | |
if(protocolCommands.indexOf(command) != -1){ | |
var message = parts[1]; | |
for(var i = 2; i < parts.length; i++){ | |
message += (":" + parts[i]); | |
} | |
client.emit(command, message); | |
return; | |
} | |
client.emit('messageError', command); | |
//handle the error | |
}); | |
client.on('error', function(err){ | |
console.log("error de comunicación con el cliente", err); | |
}); | |
client.on('close', function(){ | |
removeClient(client.id); | |
var message = util.format("internal:El usuario %s se desconectó", client.id); | |
listClients.forEach(function(sc){ | |
sc.write(message); | |
}); | |
}); | |
function removeClient(id){ | |
var pos = -1; | |
for(var i = 0; i < listClients.length; i++){ | |
var sc = listClients[i]; | |
if(sc.id == id){ | |
pos = i; | |
break; | |
} | |
} | |
if(pos != -1){ | |
console.log("size", listClients.length); | |
listClients.splice(pos, 1); | |
console.log("size", listClients.length); | |
} | |
} | |
client.on('list', function(){ | |
var names = []; | |
listClients.forEach(function(cs){ | |
names.push(cs.id); | |
}); | |
var message = util.format("list:%s", names.join(',')); | |
client.write(message); | |
}); | |
client.on('nick', function(nick){ | |
var oldNick = client.id; | |
client.id = nick; | |
var message = util.format("changeNick:%s:%s", oldNick, nick); | |
client.write(message); | |
}); | |
client.on('messageError', function(command){ | |
var message = util.format("error:El comando %s no es válido", command); | |
client.write(message); | |
}); | |
client.on('broadcast', function(broadcastMessage){ | |
var message = util.format("broadcast:%s:%s", client.id, broadcastMessage); | |
listClients.forEach(function(sc){ | |
sc.write(message); | |
}); | |
}); | |
client.on('chat', function(chatMessage){ | |
var parts = chatMessage.split(':'), | |
user = parts[0], | |
msg = parts[1]; | |
var message = util.format("chatFrom:%s:%s", client.id, msg); | |
for(var i = 0; i < listClients.length; i++){ | |
if(listClients[i].id == user){ | |
listClients[i].write(message); | |
break; | |
} | |
} | |
}); | |
}); | |
server.listen(port); | |
server.on('error', function(err){ | |
console.log("error del servidor", err); | |
}); | |
function processNewClientConnection(client){ | |
var newID = randomID(8); | |
client.id = newID; | |
listClients.push(client); | |
var message = "internal:Saludos"; | |
client.write(message); | |
var notification = util.format("internal:Se conecto el usuario %s", newID); | |
for(var i = 0; i < listClients.length; i++){ | |
if(listClients[i].id != newID){ | |
listClients[i].write(notification); | |
} | |
} | |
} | |
function randomID(size){ | |
var id = ""; | |
var characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; | |
var n = characters.length; | |
for(var i = 0; i < size; i++){ | |
var r = Math.ceil(Math.random() * 100) % n; | |
id += characters[r]; | |
} | |
return id; | |
} | |
setInterval(function(){ | |
console.log("total de clientes conectactos", listClients.length); | |
}, 5000); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment