Skip to content

Instantly share code, notes, and snippets.

@cfstras
Last active December 18, 2015 01:39
Show Gist options
  • Save cfstras/5704964 to your computer and use it in GitHub Desktop.
Save cfstras/5704964 to your computer and use it in GitHub Desktop.
Chatserver
// Bib's
var net = require('net');
// Fettes Array
var clients = [];
// create teh server!
var srv = net.createServer();
// connection handler, das Argument ist ein Socket mit der neuen Verbindung
srv.on('connection', function (conn) {
// Adresse speichern, bequemlichkeit
var addr = conn.remoteAddress;
console.log('connected:', conn.remoteAddress);
// client in array schieben
clients.push(conn);
// Man heiße den Kunden willkommen
conn.write('Hai there!\n');
// handler für Verbindungsende
conn.on('end', function () {
console.log('disconnected:', addr);
var i = clients.indexOf(conn);
if (i !== -1) {
// raus mit dem Client
clients.slice(i,1);
}
});
// Handler für eingehende Daten
conn.on('data',function (buf) {
for (c in clients) {
// hasOwnProperty checkt, dass nicht irgendwo eine Funktion mititeriert wird
if(clients.hasOwnProperty(c) && conn !== c) {
clients[c].write(addr + ': ' + buf.toString().trim() + '\n');
}
}
// auch auf die Konsole
console.log(addr + ': ' + buf.toString().trim());
});
});
// und los geht's
srv.listen(6112);
// Bibliotheken
var dgram = require('dgram'),
repl = require('repl');
var port = 6112;
// Adressen von anderen clients
var addrs = [];
// socket oeffnen
var sock = dgram.createSocket('udp4');
// Commandline starten
var c = repl.start('>');
// die Funktion send in den wortschatz aufnehmen
c.context.s = send;
// Listener fuer eingehende nachrichten
sock.on('message', function(msg,sender){
console.log('from',sender,msg.toString());
// letzte nachricht zur untersuchung in die kommandozeile aufnehmen
c.context.l = msg;
c.context.li = sender;
// Absender in Liste eintragen
if(sender.address !== "127.0.0.1") {
if(addrs.indexOf(sender.address)===-1) {
addrs.push(sender.address);
}
}
// Nachricht versenden
addrs.forEach(function(addr){
if(addr !== sender.address) {
send(sender.address+': '+msg.toString(),addr,port);
}
});
// Handler fuer das Start-Event des Sockets
}).on('listening', function() {
console.log('listening');
});
// Socket auf port Lauschen lassen
sock.bind(port);
// Debug-Funktion
function msgDelivered(err,bytes) {
if(err) {
console.log(err,'bytes:',bytes)
}
};
// Hilfsfunktion zum Senden
function send(msg,addr,port) {
var msg = new Buffer(msg);
sock.send(msg,0,msg.length,port,addr,msgDelivered);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment