Guest User

Untitled

a guest
Jul 5th, 2018
416
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Hogerlager
  2.  
  3. var io = require('socket.io').listen(12341);
  4.  
  5. var mysqlServer = require('mysql');
  6.  
  7. var users = {}; //List of all users connected
  8. var queue = {}; //List of all users in queue
  9. var players = {}; //List of users currently playing
  10.  
  11. var timeOuts = {}; //Controls user timeouts
  12.  
  13. io.of('/hogerlager').on('connection', function(socket)
  14. {
  15.     var mysql = mysqlServer.createClient(
  16.         {
  17.             user: 'filipvandenbulck',
  18.             password: 'sammeke',
  19.             host: 'filipvandenbulck.be'
  20.         });
  21.     mysql.query('USE filipvandenbulck_nc_filipvandenbulck_be');
  22.    
  23.     socket.on('auth', function(ip, func)
  24.     {
  25.         var clientIP = socket.handshake.address.address;
  26.         //Put ID in database
  27.         mysql.query("INSERT INTO nc_node_key (node_key_ip, node_key_key) VALUES('" + clientIP + "', '" + socket.id + "')", function(err)
  28.         {
  29.             if(err)
  30.             {
  31.                 func('ERR');
  32.             }
  33.             else
  34.             {
  35.                 mysql.query("SELECT LAST_INSERT_ID() AS id", function(err, results)
  36.                 {
  37.                     if(err)
  38.                     {
  39.                         func('ERR');
  40.                     }
  41.                     else
  42.                     {
  43.                         socket.mysqlKeyId = results[0]['id'];
  44.                         func(socket.mysqlKeyId);
  45.                     }
  46.                 });
  47.             }
  48.         });
  49.     });
  50.    
  51.     socket.on('ack', function(id, func)
  52.     {
  53.         //Select user with node key
  54.         if(id == socket.mysqlKeyId)
  55.         {
  56.             console.log(socket.id);
  57.             mysql.query("SELECT id, username FROM nc_user WHERE id = (SELECT player_id FROM nc_hogerlager_player WHERE node_key = '" + socket.id + "')", function(err, results)
  58.             {
  59.                 if(err)
  60.                 {
  61.                     func('ERR');
  62.                 }
  63.                 else
  64.                 {
  65.                     var userId = results[0]['id'];
  66.                     var userName = results[0]['username'];
  67.                     socket.userId = userId;
  68.                     socket.userName = userName;
  69.                    
  70.                     console.log('User connected: ' + userId + ' - ' + userName);
  71.                    
  72.                     if(users[userName])
  73.                     {
  74.                         //Player was already connected and just rejoined the game
  75.                         func(userId);
  76.                         sendLists();
  77.                         console.log('Cleared timeout for ' + socket.userId);
  78.                         clearTimeout(timeOuts[socket.userId]);
  79.                         socket.broadcast.emit('timeoutstop', socket.userName);
  80.                         users[userName] = socket;
  81.                     }
  82.                     else
  83.                     {
  84.                         //Player connected and authed
  85.                         func(userId);
  86.                         users[userName] = socket;
  87.                         //If queue is empty and playerlistis not full, put player in playerlist, otherwise put him in the queue
  88.                         console.log(size(queue));
  89.                         console.log(size(players));
  90.                         queue[userName] = userId;
  91.                         if(size(players) < 2)
  92.                         {
  93.                             queueProceed();
  94.                         }
  95.                         sendLists();
  96.                     }
  97.                    
  98.                     console.log('Playerlist:');
  99.                     for(var i in players)
  100.                     {
  101.                         console.log('  ' + i + ': ' + players[i]);
  102.                     }
  103.                 }
  104.             });
  105.         }
  106.         else
  107.         {
  108.             func('ERR');
  109.         }
  110.     });
  111.  
  112.     socket.on('disconnect', function()
  113.     {
  114.         if (!socket.userId) return;
  115.        
  116.         //Player left, wait for timeout to remove from playerlist
  117.         console.log('Starting timeout for ' + socket.userId);
  118.         //Notify clients of started timeout
  119.         socket.broadcast.emit('timeoutstart', socket.userName);
  120.         timeOuts[socket.userId] = setTimeout(function()
  121.         {
  122.             var userName = socket.userName;
  123.             delete users[userName];
  124.             delete queue[userName];
  125.             delete players[userName];
  126.            
  127.             if(size(queue) >= 1 && size(players) < 2)
  128.             {
  129.                 queueProceed();
  130.             }
  131.            
  132.             mysql.query("DELETE FROM nc_hogerlager_player WHERE node_key = '" + socket.id + "'");
  133.             mysql.end();
  134.             //socket.broadcast.emit('notification', socket.userName + ' heeft het spel verlaten');
  135.             socket.broadcast.emit('queue', queue);
  136.             socket.broadcast.emit('players', players);
  137.             socket.broadcast.emit('timeoutstop', userName);
  138.         }, 15000);
  139.     });
  140.    
  141.     function sendLists()
  142.     {
  143.         socket.broadcast.emit('queue', queue);
  144.         socket.emit('queue', queue);
  145.        
  146.         socket.broadcast.emit('players', players);
  147.         socket.emit('players', players);
  148.     }
  149.    
  150.     function ioEmit(event, value)
  151.     {
  152.         socket.broadcast.emit(event, value);
  153.         socket.emit(event, value);
  154.     }
  155.    
  156. });
  157.  
  158. function size(obj)
  159. {
  160.     var c = 0;
  161.     for(var i in obj)
  162.     {
  163.         c++;
  164.     }
  165.     return c;
  166. }
  167.  
  168. function queueProceed()
  169. {
  170.     var elem = false;
  171.     var newQueue = {};
  172.     for(var i in queue)
  173.     {
  174.         if(elem == false)
  175.         {
  176.             elem = true;
  177.             players[i] = queue[i];
  178.         }
  179.         else
  180.         {
  181.             newQueue[i] = queue[i];
  182.         }
  183.     }
  184.    
  185.     if(size(players) == 2)
  186.     {
  187.         for(var i in players)
  188.         {
  189.             users[i].emit('system', 'gameStart');
  190.             users[i].set('isPlaying', 'true');
  191.         }
  192.     }
  193.    
  194.     queue = newQueue;
  195. }
Add Comment
Please, Sign In to add comment