Advertisement
Guest User

Untitled

a guest
Apr 8th, 2020
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Dependencies.
  2. var express = require('express');
  3. var http = require('http');
  4. var path = require('path');
  5. var socketIO = require('socket.io');
  6. const Crypto = require('crypto')
  7.  
  8. var app = express();
  9. var server = http.Server(app);
  10. var io = socketIO(server);
  11.  
  12. app.set('port', 5000);
  13. app.use('/static', express.static(__dirname + '/static'));
  14.  
  15. // Routing
  16. app.get('/', function(request, response) {
  17.   response.sendFile(path.join(__dirname, 'index.html'));
  18. });
  19. app.get('/register', function(request, response) {
  20.   response.sendFile(path.join(__dirname, 'register.html'));
  21. });
  22.  
  23. server.listen(5000, function() {
  24.   console.log('Starting server on port 5000');
  25. });
  26.  
  27. var gameState = {
  28.     "words" : GetWords(),
  29.     "players" : GetPlayers(),
  30.     "turn" : 0,
  31.     "side" : "red"
  32. };
  33.  
  34. io.on('connection', function(socket) {
  35.   socket.on('register', function(data) {
  36.     AddPlayer(socket, data)
  37.   });
  38.  
  39.   socket.on('validate session', function(data)
  40.   {
  41.     ValidateSession(socket, data)
  42.   });
  43.  
  44.   socket.on('chose word', SelectWord);
  45. });
  46.  
  47. setInterval(function() {
  48.   io.sockets.emit('state', gameState);
  49. }, 1000 / 5);
  50.  
  51. function SelectWord(data)
  52. {
  53.     // TODO: add check that it is the correct user turn
  54.     correctPlayer = false;
  55.     for (var i = 0; i < gameState.players[gameState.side].length; i++)
  56.     {
  57.         if (gameState.players[gameState.side][i].session_id == data.player)
  58.         {
  59.             correctPlayer = true;
  60.             break;
  61.         }
  62.     }
  63.  
  64.     if (!correctPlayer)
  65.     {
  66.         return;
  67.     }
  68.  
  69.     // Change selected word to visible
  70.     for (var i = 0; i < gameState.words.length; i++)
  71.     {
  72.         if (players.words[i].text == data.word)
  73.         {
  74.             gameState.words[i].state = "visible";
  75.             gameState.turn += 1
  76.  
  77.             // Logic for turn sides
  78.             if (players.side == "red")
  79.             {
  80.                 gameState.side = "blue";
  81.             }
  82.             else
  83.             {
  84.                 gameState.side = "red";
  85.             }
  86.             return;
  87.         }
  88.     }
  89.  
  90.     console.log("Error in selecting word");
  91. }
  92.  
  93. function GetWords()
  94. {
  95.     // colors taken from https://materializecss.com/color.html
  96.     wordList = [
  97.         {text:"a", state: "hidden", color:"red"},
  98.         {text:"b", state: "hidden", color:"blue"},
  99.         {text:"c", state: "hidden", color:"brown lighten-3"},
  100.         {text:"d", state: "hidden", color:"red"},
  101.         {text:"e", state: "hidden", color:"blue"},
  102.         {text:"f", state: "hidden", color:"brown lighten-3"},
  103.         {text:"g", state: "hidden", color:"red"},
  104.         {text:"h", state: "hidden", color:"blue"},
  105.         {text:"i", state: "hidden", color:"brown lighten-3"},
  106.         {text:"j", state: "hidden", color:"red"},
  107.         {text:"k", state: "hidden", color:"blue"},
  108.         {text:"l", state: "hidden", color:"brown lighten-3"},
  109.         {text:"m", state: "hidden", color:"red"},
  110.         {text:"n", state: "hidden", color:"blue"},
  111.         {text:"o", state: "hidden", color:"brown lighten-3"},
  112.         {text:"p", state: "hidden", color:"red"},
  113.         {text:"q", state: "hidden", color:"blue"},
  114.         {text:"r", state: "hidden", color:"brown lighten-3"},
  115.         {text:"s", state: "hidden", color:"red"},
  116.         {text:"t", state: "hidden", color:"blue"},
  117.         {text:"u", state: "hidden", color:"brown lighten-3"},
  118.         {text:"v", state: "hidden", color:"red"},
  119.         {text:"q", state: "hidden", color:"blue"},
  120.         {text:"x", state: "hidden", color:"brown lighten-3"},
  121.         {text:"y", state: "hidden", color:"blue-grey darken-4"},
  122.     ]
  123.     return wordList;
  124. }
  125.  
  126. function GetPlayers()
  127. {
  128.     players = {
  129.         "red" : [
  130.             {"name" : "zohar", "ismaster" : true},
  131.             {"name" : "zohar", "ismaster" : false},
  132.             {"name" : "zohar", "ismaster" : false},
  133.             {"name" : "zohar", "ismaster" : false},
  134.         ],
  135.         "blue" : [
  136.             {"name" : "roee", "ismaster" : true},
  137.             {"name" : "roee", "ismaster" : false},
  138.             {"name" : "roee", "ismaster" : false},
  139.             {"name" : "roee", "ismaster" : false},
  140.         ]
  141.     }
  142.  
  143.     return players
  144. }
  145.  
  146. function AddPlayer(socket, name)
  147. {
  148.     var session_id = randomString(); //generating the sessions_id and then binding that socket to that sessions
  149.     gameState.players.red.push({"name": name, "ismaster" : false, "session_id": session_id})
  150.  
  151.     socket.room = session_id;
  152.     socket.join(socket.room, function(res)
  153.     {
  154.         console.log("joined successfully")
  155.         socket.emit("set-session-acknowledgement", { sessionId: session_id })
  156.     });
  157.  
  158. }
  159.  
  160. function randomString(size = 21) {  
  161.   return Crypto
  162.     .randomBytes(size)
  163.     .toString('base64')
  164.     .slice(0, size)
  165. }
  166.  
  167. function ValidateSession(socket, data)
  168. {
  169.     for (var i = 0; i < gameState.players["red"].length; i++)
  170.     {
  171.         if (gameState.players["red"][i].session_id == data.player)
  172.         {
  173.             correctPlayer = true;
  174.             break;
  175.         }
  176.     }
  177.     for (var i = 0; i < gameState.players["blue"].length; i++)
  178.     {
  179.         if (gameState.players["blue"][i].session_id == data.player)
  180.         {
  181.             correctPlayer = true;
  182.             break;
  183.         }
  184.     }
  185. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement