diff --git a/slides/chatserver.js b/slides/chatserver.js new file mode 100644 index 0000000000000000000000000000000000000000..cf73355453871452caffc0a24c3291f9da079f71 --- /dev/null +++ b/slides/chatserver.js @@ -0,0 +1,45 @@ +// Load the TCP Library +net = require('net'); + +// Keep track of the chat clients +var clients = []; + +// Start a TCP Server +net.createServer(function (socket) { + + // Identify this client + socket.name = socket.remoteAddress + ":" + socket.remotePort + + // Put this new client in the list + clients.push(socket); + + // Send a nice welcome message and announce + socket.write("Welcome " + socket.name + "\n"); + broadcast(socket.name + " joined the chat\n", socket); + + // Handle incoming messages from clients. + socket.on('data', function (data) { + broadcast(socket.name + "> " + data, socket); + }); + + // Remove the client from the list when it leaves + socket.on('end', function () { + clients.splice(clients.indexOf(socket), 1); + broadcast(socket.name + " left the chat.\n"); + }); + + // Send a message to all clients + function broadcast(message, sender) { + clients.forEach(function (client) { + // Don't want to send it to sender + if (client === sender) return; + client.write(message); + }); + // Log it to the server output too + process.stdout.write(message) + } + +}).listen(5000); + +// Put a friendly message on the terminal of the server. +console.log("Chat server running at port 5000\n"); \ No newline at end of file