Thursday, November 26, 2015

[Javascript] Fun Chat Server

Instructions: 
Run the code from the command line:
$ node chatServer.js
Open two more command line prompts, and telnet to port 9000 on each.
Whatever you type in one window will be displayed in the other.


var net = require('net');
var eol = require('os').EOL;

var srvr = net.createServer();
var clientList = [];

srvr.on('connection', function(client) {
  client.name = client.remoteAddress + ':' + client.remotePort;
  client.write('Welcome, ' + client.name + eol);
  clientList.push(client);

  client.on('data', function(data) {
    broadcast(data, client);

    if(data.toString().trim() === "\\list")
    {
      for(var i in clientList)
      {
        if(client === clientList[i])
        {
          for(var j in clientList)
          {
            clientList[i].write(clientList[j].name + "\n");
          }
        }
      }
    }

    if(data.indexOf("\\rename") === 0)
    {
      var namae = data.toString().trim().replace("\\rename", "");

      client.name = namae;
    }

    if(data.indexOf("\\private") === 0)
    {
      var namae = data.toString().trim().replace("\\private", "");
      var realname = [];

      for(var i = 0; i < namae.length; i++)
      {
        var words = namae[i].split(" ");
        realname.push(words[0]);
      }

      //console.log(realname);
      var okname = " ";
      var n = 0;
      for(var i = 1; i < realname.length; i++)
      {
        if(realname[i] !== "")
        {
          okname += realname[i];
        }
        else{
          n = i;
          break;
        }
      }

      var speech = "";
      for(var i = n; i < realname.length; i++)
      {
        if(realname[i] !== "")
        {
          speech += realname[i];
        }
        else{
          speech += " ";
        }
      }

      console.log(okname); //ok got a name 
      for(var i in clientList)
      {
        if(clientList[i].name === okname)
        {
          //console.log(okname + " is in lol");
          clientList[i].write(client.name + " says " + speech + "\n");
        }
      }
    }

  });
});

function broadcast(data, client) {
  for (var i in clientList) {
    if (client !== clientList[i] && data.indexOf("\\private") !== 0 && data.indexOf("\\rename") !== 0 && data.toString().trim() !== "\\list") {
      clientList[i].write(client.name + " says " + data);
    }
  }
}

srvr.listen(9000);

No comments:

Post a Comment