Advertisement
fraxken

Untitled

Mar 29th, 2015
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var app     = require('express')();
  2. var server  = require('http').Server(app);
  3. var io      = require('socket.io')(server);
  4.  
  5. app.get('/', function (req, res) {
  6.   res.send("Hello world");
  7. });
  8.  
  9.  
  10. var clients = {};
  11. var Rooms = {};
  12.  
  13. // Function qui retourne les pseudos des utilisateurs d'une room.
  14. function GetClientFromRoom(room) {
  15.     var connectedClients = io.nsps["/"].adapter.rooms[room];
  16.     var tmp_user = [];
  17.     for(var a in connectedClients) {
  18.         for(var b in clients) {
  19.             if(a == b) {
  20.                 tmp_user.push(clients[b].login);
  21.             }
  22.         }
  23.     }
  24.  
  25.     return tmp_user;
  26. }
  27.  
  28. // Connexion a socket.io
  29. io.on('connection', function (socket) {
  30.  
  31.     clients[socket.id] = {
  32.         login : null,
  33.         avatar : null,
  34.         points : null,
  35.         active_room : null
  36.     }
  37.  
  38.     socket.on('setUser',function(req) {
  39.         clients[socket.id].login = req.username;
  40.         socket.emit("connectedUser",{username:req.username});
  41.     });
  42.  
  43.     socket.on('resetUser', function(req) {
  44.         clients[socket.id].login = null;
  45.         socket.emit("disconnectUser",{message:null});
  46.     });
  47.  
  48.  
  49.     socket.on('createGame',function(req) {
  50.         req.name = req.name.split(' ').join('_').toLowerCase().toString();
  51.         if(Rooms[req.name] == undefined) {
  52.             var tmp_password = (req.password === undefined || req.password === null) ? null : req.password;
  53.             req.name = req.name.split(' ').join('_').toLowerCase();
  54.             Rooms[req.name] = {
  55.                 name : req.name,
  56.                 administrator : socket.id,
  57.                 started : false,
  58.                 gameMode : req.gameMode,
  59.                 password : tmp_password,
  60.                 playerConnected : 1,
  61.                 playerMAX : req.playerMAX,
  62.                 team : {}
  63.             }
  64.  
  65.             console.log("Game create with name "+req.name);
  66.            
  67.             socket.emit('connectLobby',{
  68.                 lobby: req.name,
  69.                 username: clients[socket.id].login,
  70.                 isAdmin : true,
  71.                 state: true
  72.             });
  73.  
  74.             socket.broadcast.emit('setRooms',{rooms:Rooms[req.name],unique:true});
  75.  
  76.             socket.join(req.name);
  77.             clients[socket.id].active_room = req.name;
  78.         }
  79.         else {
  80.             console.log("client '"+clients[socket.id].login+"' failed to create a game!")
  81.         }
  82.     });
  83.  
  84.     function ConnectPlayer(roomID) {
  85.         var RoomPlayerConnected = Rooms[roomID].playerConnected;
  86.         var RoomPlayerConnected_After = Rooms[roomID].playerConnected + 1;
  87.  
  88.         if(RoomPlayerConnected_After <= Rooms[roomID].playerMAX) {
  89.             console.log("client '"+clients[socket.id].login+"' is now connedted to the lobby "+roomID);
  90.             socket.emit('connectLobby',{
  91.                 lobby: roomID,
  92.                 username: clients[socket.id].login,
  93.                 state: true
  94.             });
  95.             clients[socket.id].active_room = roomID;
  96.  
  97.             Rooms[roomID].playerConnected += 1
  98.             var connectedClients = GetClientFromRoom(roomID);
  99.  
  100.             socket.emit('adduserToLobby',{userlist:connectedClients});
  101.             socket.broadcast.emit('updateRooms',{
  102.                 roomID : roomID,
  103.                 playerConnected : Rooms[roomID].playerConnected,
  104.                 playerMAX : Rooms[roomID].playerMAX
  105.             });
  106.             socket.broadcast.to(roomID).emit('adduserToLobby',{userlist:clients[socket.id].login});
  107.  
  108.             socket.join(roomID);
  109.         }
  110.         else {
  111.             console.log("client '"+clients[socket.id].login+"' fail connection to the lobby "+roomID);
  112.             socket.emit('connectLobby',{state: false,err:"The game is full!"});
  113.         }
  114.     }
  115.  
  116.     socket.on('joinRoom',function(req) {
  117.         if(Rooms[req.roomID] !== undefined) {
  118.  
  119.             if(Rooms[req.roomID].password == null) {
  120.                 ConnectPlayer(req.roomID);
  121.             }
  122.             else {
  123.                 console.log("client '"+clients[socket.id].login+"' requested password for room -> "+req.roomID);
  124.                 socket.emit('needPassword',{roomID:req.roomID});
  125.             }
  126.  
  127.         }
  128.     });
  129.  
  130.     socket.on('joinRoom_Password', function(req) {
  131.         console.log("client '"+clients[socket.id].login+"' trying to join lobby with password");
  132.         if(Rooms[req.roomID] != undefined) {
  133.             if(Rooms[req.roomID].password == req.password) {
  134.                 ConnectPlayer(req.roomID);
  135.             }
  136.             else {
  137.                 socket.emit('invalidPassword',{});
  138.             }
  139.         }
  140.         else {
  141.             socket.emit('connectLobby',{state: false,err:"Server timed out."});
  142.         }
  143.     });
  144.  
  145.     // Function for testing and removing player from lobby. (or destroying empty lobby).
  146.     function RemovePlayer() {
  147.         var RoomExited = clients[socket.id].active_room;
  148.         if(Rooms[RoomExited] != undefined) {
  149.             var RoomPlayerConnected_After = Rooms[RoomExited].playerConnected - 1;
  150.  
  151.             // On vérifie que le lobby n'est pas vide, sinon on le supprime.
  152.             if(RoomPlayerConnected_After <= 0) {
  153.                 Rooms[RoomExited] = undefined;
  154.                 console.log("destroying room "+RoomExited);
  155.                 io.sockets.emit('destroyRooms', {rooms:RoomExited});
  156.             }
  157.             else {
  158.                 socket.leave(RoomExited);
  159.                 clients[socket.id].active_room = null;
  160.  
  161.                 console.log("client '"+clients[socket.id].login+"' leave the room -> "+RoomExited);
  162.                 socket.broadcast.to(RoomExited).emit('removeuserFromLobby',{name:clients[socket.id].login});
  163.                 if(Rooms[RoomExited].administrator == socket.id) {
  164.                     // On définie un nouvelle administrator.
  165.                     var connectedClients = io.nsps["/"].adapter.rooms[RoomExited];
  166.                     for(var i in connectedClients) {
  167.                         Rooms[RoomExited].administrator = i;
  168.                         break;
  169.                     }
  170.                     console.log("room -> "+RoomExited+" switching Administrator for client -> "+clients[Rooms[RoomExited].administrator].login);
  171.                     socket.broadcast.to(RoomExited).emit('newAdministrator',{userID:clients[Rooms[RoomExited].administrator].login});
  172.                     io.to(Rooms[RoomExited].administrator).emit('adminAttribution', {});
  173.                 }
  174.                 Rooms[RoomExited].playerConnected -= 1;
  175.  
  176.                 socket.broadcast.emit('updateRooms',{
  177.                     roomID : RoomExited,
  178.                     playerConnected : Rooms[RoomExited].playerConnected,
  179.                     playerMAX : Rooms[RoomExited].playerMAX
  180.                 });
  181.             }
  182.         }
  183.     }
  184.  
  185.     socket.on('exitRoom',function(req) {
  186.         RemovePlayer();
  187.         socket.emit('exitLobby',{});
  188.     });
  189.  
  190.     socket.on('getRooms',function(req) {
  191.         socket.emit('setRooms',{rooms:Rooms});
  192.     });
  193.  
  194.  
  195.     // Lorsque l'utilisateur ce déconnecte.
  196.     socket.on('disconnect', function () {
  197.         if(clients[socket.id].active_room != null) {
  198.             RemovePlayer();
  199.         }
  200.         clients[socket.id] = undefined;
  201.     });
  202.  
  203. });
  204.  
  205. server.listen(7076,"0.0.0.0");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement