Skip to content

Instantly share code, notes, and snippets.

@diegogurgel
Last active August 29, 2015 14:00
Show Gist options
  • Save diegogurgel/11360922 to your computer and use it in GitHub Desktop.
Save diegogurgel/11360922 to your computer and use it in GitHub Desktop.

####Chat feito em Node.js

Para executar você deve ter o Node.js instalado.

Em uma janela do terminal navegue até o diretório dos arquivos server.js e client.js

Digite o comando:

node server.js	

Em outra janela do terminal no mesmo diretório digite o comando:

node client.js

(Faça isso para quantos clientes quiser conectar, a conversa só será visualizada se dois ou mais clientes forem iniciados)

Para visualizar a conversa "criptografada" use o telnet:

telnet localhost 5000

##Diego Oliveira Gurgel

var net = require('net'); // Módulo net para funcionalidades básicas de rede
var client = net.connect(5000,'127.0.0.1',function(conn){
});
//Evento que irá aguardar o envio de algum dado vindo do servidor(a mensagem para esse caso)
client.on('data',function(data){
//Altera o charcode para a letra correspondente ASCII("decriptação")
var msgSecret = data.toString();
msgSecret = msgSecret.split(':');
var user = msgSecret[0];
msgSecret = msgSecret[1].split(',');
var msg='';
for (var i = 0; i< msgSecret.length; i++) {
msg += String.fromCharCode(msgSecret[i]);
};
//Exibe a mensagem ao cliente
console.log(user+": "+msg);
});
//Aguarda que o usuário digite algo para que seja enviado ao servidor(leitura de linha do console).
var readline = require('readline');
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('line', function (cmd) {
//cliente escrene na conexão.
client.write(cmd);
});
var net = require('net'); // Módulo net para funcionalidades básicas de rede
var clients = [] //lista de clientes conectados
//Criar servidor, considere o parametro connection um socket.
var server = net.createServer(function(connection){
//Solicita o nome de usuário ao cliente
connection.write("Usuário: ");
//Evento que irá aguardar o envio de algum dado vindo do cliente(a mensagem para esse caso)
connection.on('data',function(data){
/*se o nome de usuário ainda não estiver definido
significa que a mansagem que o usuário está enviando é o seu nome de usuário.
caso o userName esteja definido significa que é uma mensagem para o chat*/
if(connection.userName===undefined){
connection.userName=data.toString();
clients.push(connection);
}else{
sendMessageForAll(data.toString(),connection);
}
});
});
//Servidor localhost:5000
server.listen(5000,function(){
console.log('server listen port 5000');
});
//Envia mensagem para todos os clientes.
function sendMessageForAll(msg, client){
clients.forEach(function(c){
//Verifica se o destinátário é diferente do remetente
if(c!=client){
var msgToClients=[];
//Varre a mensagem convertendo cada letra para o seu respectivo código de caracter ASCII("criptografia");
for(var i=0;i<msg.length;i++){
msgToClients.push(msg.charCodeAt(i));
}
//Envia msg "criptografada a cada um dos clientes conectados"
c.write(client.userName.trim()+": "+msgToClients+"\n");
}
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment