Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Hogerlager
- var io = require('socket.io').listen(12341);
- var mysqlServer = require('mysql');
- var users = {}; //List of all users connected
- var queue = {}; //List of all users in queue
- var players = {}; //List of users currently playing
- var timeOuts = {}; //Controls user timeouts
- io.of('/hogerlager').on('connection', function(socket)
- {
- var mysql = mysqlServer.createClient(
- {
- user: 'filipvandenbulck',
- password: 'sammeke',
- host: 'filipvandenbulck.be'
- });
- mysql.query('USE filipvandenbulck_nc_filipvandenbulck_be');
- socket.on('auth', function(ip, func)
- {
- var clientIP = socket.handshake.address.address;
- //Put ID in database
- mysql.query("INSERT INTO nc_node_key (node_key_ip, node_key_key) VALUES('" + clientIP + "', '" + socket.id + "')", function(err)
- {
- if(err)
- {
- func('ERR');
- }
- else
- {
- mysql.query("SELECT LAST_INSERT_ID() AS id", function(err, results)
- {
- if(err)
- {
- func('ERR');
- }
- else
- {
- socket.mysqlKeyId = results[0]['id'];
- func(socket.mysqlKeyId);
- }
- });
- }
- });
- });
- socket.on('ack', function(id, func)
- {
- //Select user with node key
- if(id == socket.mysqlKeyId)
- {
- console.log(socket.id);
- 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)
- {
- if(err)
- {
- func('ERR');
- }
- else
- {
- var userId = results[0]['id'];
- var userName = results[0]['username'];
- socket.userId = userId;
- socket.userName = userName;
- console.log('User connected: ' + userId + ' - ' + userName);
- if(users[userName])
- {
- //Player was already connected and just rejoined the game
- func(userId);
- sendLists();
- console.log('Cleared timeout for ' + socket.userId);
- clearTimeout(timeOuts[socket.userId]);
- socket.broadcast.emit('timeoutstop', socket.userName);
- users[userName] = socket;
- }
- else
- {
- //Player connected and authed
- func(userId);
- users[userName] = socket;
- //If queue is empty and playerlistis not full, put player in playerlist, otherwise put him in the queue
- console.log(size(queue));
- console.log(size(players));
- queue[userName] = userId;
- if(size(players) < 2)
- {
- queueProceed();
- }
- sendLists();
- }
- console.log('Playerlist:');
- for(var i in players)
- {
- console.log(' ' + i + ': ' + players[i]);
- }
- }
- });
- }
- else
- {
- func('ERR');
- }
- });
- socket.on('disconnect', function()
- {
- if (!socket.userId) return;
- //Player left, wait for timeout to remove from playerlist
- console.log('Starting timeout for ' + socket.userId);
- //Notify clients of started timeout
- socket.broadcast.emit('timeoutstart', socket.userName);
- timeOuts[socket.userId] = setTimeout(function()
- {
- var userName = socket.userName;
- delete users[userName];
- delete queue[userName];
- delete players[userName];
- if(size(queue) >= 1 && size(players) < 2)
- {
- queueProceed();
- }
- mysql.query("DELETE FROM nc_hogerlager_player WHERE node_key = '" + socket.id + "'");
- mysql.end();
- //socket.broadcast.emit('notification', socket.userName + ' heeft het spel verlaten');
- socket.broadcast.emit('queue', queue);
- socket.broadcast.emit('players', players);
- socket.broadcast.emit('timeoutstop', userName);
- }, 15000);
- });
- function sendLists()
- {
- socket.broadcast.emit('queue', queue);
- socket.emit('queue', queue);
- socket.broadcast.emit('players', players);
- socket.emit('players', players);
- }
- function ioEmit(event, value)
- {
- socket.broadcast.emit(event, value);
- socket.emit(event, value);
- }
- });
- function size(obj)
- {
- var c = 0;
- for(var i in obj)
- {
- c++;
- }
- return c;
- }
- function queueProceed()
- {
- var elem = false;
- var newQueue = {};
- for(var i in queue)
- {
- if(elem == false)
- {
- elem = true;
- players[i] = queue[i];
- }
- else
- {
- newQueue[i] = queue[i];
- }
- }
- if(size(players) == 2)
- {
- for(var i in players)
- {
- users[i].emit('system', 'gameStart');
- users[i].set('isPlaying', 'true');
- }
- }
- queue = newQueue;
- }
Add Comment
Please, Sign In to add comment