Advertisement
RowanHarley

Untitled

Jun 8th, 2016
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var config = require("./config/config.js");
  2. //var spawn = require("./src/spawn.js");
  3. var WebSocketServer = require("ws").Server;
  4. var snake = require("./src/entities/snake");
  5. var food = require("./src/entities/food");
  6. var sector = require("./src/entities/sector");
  7. var messages = require("./src/messages");
  8. var message = require("./src/utils/message");
  9. var math = require("./src/utils/math");
  10.  
  11.  
  12. var counter = 0;
  13. var clients = [];
  14. var foods = [];
  15. var sectors = []; // Development Code
  16.  
  17.  
  18.  
  19. console.log("[SERVER] Starting Server...");
  20. var server;
  21. server = new WebSocketServer({port: config["port"], path: "/slither"});
  22.  
  23. console.log("[SERVER] Server Started at 127.0.0.1:" + config["port"] + "! Waiting for Connections...");
  24. server.on('error', function() {
  25.     console.log('[DEBUG] Error while connecting!');
  26. });
  27. server.on("connection", handleConnection.bind(this));
  28. function handleConnection(conn) {
  29.     if (clients.length >= config['max-connections']) {
  30.         console.log("[SERVER] Too many connections. Closing newest connections!");
  31.         conn.close();
  32.         return;
  33.     }
  34.     conn.id = ++counter;
  35.     clients[conn.id] = conn;
  36.    
  37.     function close(id) {
  38.         console.log("[DEBUG] Connection closed.");
  39.         conn.send = function() {};
  40.         //clearInterval(conn.snake.update);
  41.         delete clients[id];
  42.     }
  43.     conn.on('message', handleMessage.bind(this, conn));
  44.     conn.on('error', close.bind(conn.id));
  45.     conn.on('close', close.bind(conn.id));
  46.     send(conn.id, messages.initial);
  47. };
  48. function handleMessage(conn, data) {
  49.     var firstByte, name, radians, secondByte, skin, speed, value, x, y;
  50.     if (data.length === 0) {
  51.         return;
  52.     }
  53.     if (data.length >= 227) {
  54.         conn.close();
  55.     } else if (data.length === 1) {
  56.         value = message.readInt8(0, data);
  57.         if (value <= 250) {
  58.             console.log('Snake going to', value);
  59.             if (value === conn.snake.direction.angle) {
  60.                 return;
  61.             }
  62.             radians = value * (Math.PI / 125);
  63.             speed = 1;
  64.             x = Math.cos(radians) + 1;
  65.             y = Math.sin(radians) + 1;
  66.             conn.snake.direction.x = x * 127 * speed;
  67.             conn.snake.direction.y = y * 127 * speed;
  68.             conn.snake.direction.angle = value;
  69.         } else if (value === 253) {
  70.             console.log("Snake in speed mode");
  71.         } else if (value === 254) {
  72.             console.log("Snake in speed mode");
  73.         } else if (value === 251) {
  74.             send(conn.id, messages.pong);
  75.         }
  76.     } else {
  77.         firstByte = message.readInt8(0, data);
  78.         secondByte = message.readInt8(1, data);
  79.         if (firstByte === 115) {
  80.             skin = message.readInt8(2, data);
  81.             name = message.readString(3, data, data.byteLength);
  82.             conn.snake = new snake(conn.id, name, {
  83.                 x: 28907.6 * 5,
  84.                 y: 21137.4 * 5
  85.             }, skin);
  86.             broadcast(messages.snake.build(conn.snake));
  87.             console.log("[DEBUG] A new snake called " + conn.snake.name + " was connected!");
  88.             spawnSnakes(conn.id);
  89.             conn.snake.update = setInterval((function() {
  90.                 conn.snake.body.x += Math.round(Math.cos(conn.snake.direction.angle * 1.44 * Math.PI / 180) * 170);
  91.                 conn.snake.body.y += Math.round(Math.sin(conn.snake.direction.angle * 1.44 * Math.PI / 180) * 170);
  92.                 broadcast(messages.direction.build(conn.snake.id, conn.snake.direction));
  93.                 broadcast(messages.movement.build(conn.snake.id, conn.snake.direction.x, conn.snake.direction.y));
  94.             }), 230);
  95.             } else {
  96.                 console.log("[ERROR] Unhandled message " + (String.fromCharCode(firstByte)));
  97.             }
  98.             send(conn.id, messages.leaderboard.build([conn], 1, [conn]));
  99.             send(conn.id, messages.minimap.build(this.foods));
  100.     }
  101. }
  102.  
  103. function spawnSnakes(id){
  104.     this.clients.forEach((function(_this){
  105.         return function(client){
  106.             if(client.id !== id){
  107.                 send(id, messages.snake.build(client.snake));
  108.             }
  109.         };
  110.     })(this));
  111. }
  112.  
  113. function send(id,data){
  114.     clients[id].send(data, {binary:true});
  115. }
  116.  
  117. function broadcast(data){
  118.     "use strict";
  119.     for(let client in clients){
  120.         if(client != null){
  121.             client.send(data, {binary: true});
  122.         }
  123.     }
  124. }
  125. /* function broadcast(data) {
  126.     var client, j, len, ref, results;
  127.     ref = this.clients;
  128.     results = [];
  129.     for (j = 0, len = ref.length; j < len; j++) {
  130.         client = ref[j];
  131.         results.push(client != null ? client.send(data, {
  132.             binary: true
  133.         }) : void 0);
  134.     }
  135.     return results;
  136. }; */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement