Blackthorn

Ping & IP Hashing w/ Websockets

Feb 27th, 2015
515
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. Ping & IP Hashing w/ Websockets
  3. @author  Blackthorn Yugen
  4. @version 0.3
  5. @date    Febuary 27, 2015
  6. */
  7. var util = require("util"),
  8.     io = require("socket.io")(),
  9.     port = process.env.PORT || 8000;
  10.    
  11. var AES = require("crypto-js/aes");
  12. var SHA256 = require("crypto-js/sha256");
  13.  
  14. var players = [], // I say players because I plan on making this into a small game
  15.     events = 0; // Keep track of events
  16.  
  17. // Do this each time a client connects //
  18. io.on('connection', function(client){
  19.     util.log("Connection: "+ client.id);
  20.     players.push(client);
  21.     client.on("disconnect", onClientDisconnect);
  22.     client.on("ping", onClientPing);
  23.     client.on("goodbye", onPart);
  24.     client.on("msg", onMessage);
  25.     client.on("evenOdd", checkEvenOdd);
  26.     client.on("playerHash", onPlayerHash);
  27.    
  28.     var ns = io.of("/");
  29.     for(x in ns.connected) {
  30.         var player = ns.connected[x];
  31.         if(player.id !== client.id) {
  32.             var response = getPlayerHash(client.id);
  33.             response.isNew = true;
  34.             player.emit("newPlayer", response);
  35.         }
  36.     }
  37. });
  38.  
  39. function onClientPing(data) {
  40.     events++;
  41.     var ns = io.of("/"); // the root namespace
  42.     this.emit('pong', { // Send a reply to the ping; include some server data.
  43.         message: 'This message came from Node.js!',
  44.         uptime: Math.round(process.uptime()),
  45.         players: Object.keys(ns.connected),
  46.         connected: Object.keys(ns.connected).length,
  47.         numEvents:events});
  48.     util.log("Ping!");
  49.     if(data) util.log(data);
  50. };
  51.  
  52. function onClientDisconnect(client) {
  53.     events++;
  54.     players.splice(players.indexOf(client.id),1);
  55.     util.log("Player has disconnected: "+this.id);
  56.    
  57.     var ns = io.of("/");
  58.     for(x in ns.connected) {
  59.         var player = ns.connected[x];
  60.         if(player.id !== this.id) {
  61.             player.emit("playerDisconnected", this.id);
  62.         }
  63.     }
  64. };
  65.  
  66. function onPart(data, ack){
  67.     events++;
  68.     ack("Goodbye " +this.id+ "! \n  --nodejs");
  69.     this.disconnect();
  70.     if(data) util.log(data);
  71. }
  72.  
  73. function onMessage(data, ack) {
  74.     events++;
  75.     if (ack) next(data+"?!?");
  76. };
  77.  
  78. function checkEvenOdd(input, ack) {
  79.     events++;
  80.     if(isNaN(input)){
  81.         ack('Not a number.');
  82.     } else if (+input % 2 === 0) {
  83.         ack('even');
  84.     } else {
  85.         ack('odd');
  86.     }
  87. };
  88.  
  89. function onPlayerHash(data, ack) {
  90.     events++;
  91.     var response = getPlayerHash(data);
  92.     if (this.id == data) response.isMe = true;
  93.     ack(response);
  94. }
  95.  
  96. function getPlayerHash(playerId){
  97.     var hashObject = {};
  98.     var ns = io.of("/");
  99.     var player = ns.connected[playerId];
  100.     if(player){
  101.         var hash = SHA256(player.conn.remoteAddress);
  102.         hashObject.hash = parseInt(hash, 16) % Math.pow(10,8);
  103.         hashObject.identCode = player.id;
  104.     } else {
  105.         hashObject.error = playerId + " is not a valid player id.";
  106.     }
  107.     return hashObject;
  108. }
  109.  
  110. io.listen(port);
Advertisement
Add Comment
Please, Sign In to add comment