Créé dans le cadre du projet de fin d'année de la promo 2018 de CIR2 de l'ISEN Brest/Rennes, le Burger Quizz est une adaptation numérique du jeu télévisé éponyme, plus précisément d'une épreuve spécifique de ce jeu : le "Sel ou Poivre".

server.js 4.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. var io = require('socket.io'); // Chargement du module pour mettre en place les websockets
  2. var http = require('http');
  3. var json;
  4. // Variables
  5. var server; // Le socket
  6. var lobby = [];
  7. var games = [];
  8. // Gestion des evenements
  9. // Attend l'évènement "connection"
  10. // Le client génère cet évènement lorsque la connexion est établie avec le serveur (voir l'établissement de connexion côté client)
  11. // En cas de connexion appel à la fonctione onSocketConnection
  12. // Un paramètre est envoyé en paramètre de l'évènement "connection" : ce paramètre représente le client
  13. var setEventHandlers = function() {
  14. server.sockets.on("connection", onSocketConnection);
  15. };
  16. // Fonction prenant en paramètre le client (voir ci-dessus)
  17. // Réception ou envoi d'évènement à partir de cet objet : client
  18. function onSocketConnection(client) {
  19. // Attente de l'évènement "new"
  20. // Dans cet exemple l'évènement "new" est envoyé avec un paramètre "pseudo"
  21. client.on('nouveau', function(pseudo) {
  22. // Log pour debug
  23. console.log('Nouveau joueur : '+ pseudo +' !');
  24. // Envoi d'un message au client
  25. //client.emit('message', 'bien reçu !!');
  26. if(lobby.length > 0) {
  27. games.push({joueur1: lobby[0], joueur2: {login: pseudo, socket: client, over: false, score: 0}, idGame: games.length, json: ''});
  28. games[games.length-1].joueur1.socket.emit("game", [games[games.length-1].joueur2.login, games[games.length-1].idGame]);
  29. games[games.length-1].joueur2.socket.emit("game", [games[games.length-1].joueur1.login, games[games.length-1].idGame]);
  30. lobby = [];
  31. } else {
  32. lobby.push({login: pseudo, socket: client, over: false, score: 0});
  33. }
  34. // Envoi d'un message aux autres clients connectés
  35. //client.broadcast.emit('autres', pseudo);
  36. });
  37. client.on('error', function(err) {
  38. console.log(err);
  39. });
  40. client.on('start', function(gameID) {
  41. http.get("http://localhost/burger-quizz/web/api/", function(res) {
  42. var data = "";
  43. res.on("data", function(returned) {
  44. data += returned;
  45. })
  46. res.on("error", function(err) {
  47. console.log(err);
  48. });
  49. res.on("end", function() {
  50. if(!games[gameID].json) {
  51. games[gameID].json = JSON.parse(data.toString());
  52. }
  53. client.emit('questions', games[gameID].json);
  54. })
  55. });
  56. });
  57. client.on('findugame', function(options) {
  58. if(games[options[0]].joueur1.socket.id === client.id) {
  59. games[options[0]].joueur1.over = true;
  60. games[options[0]].joueur1.score = options[1];
  61. console.log("Joueur 1 ("+games[options[0]].joueur1.login+") a fini.");
  62. } else if(games[options[0]].joueur2.socket.id === client.id) {
  63. games[options[0]].joueur2.over = true;
  64. games[options[0]].joueur2.score = options[1];
  65. console.log("Joueur 2 ("+games[options[0]].joueur2.login+") a fini.");
  66. }
  67. if(games[options[0]].joueur1.over && games[options[0]].joueur2.over) {
  68. console.log("Partie terminée.");
  69. games[options[0]].joueur1.socket.emit('end', games[options[0]].joueur2.score);
  70. games[options[0]].joueur2.socket.emit('end', games[options[0]].joueur1.score);
  71. games.splice(options[0], 1);
  72. console.log(games);
  73. }
  74. });
  75. client.on('disconnect', function() {
  76. games.forEach(function(row) {
  77. if(row.joueur1.socket.id === client.id) {
  78. console.log("Joueur déconnecté ("+row.joueur1.login+") ; socket id : "+client.id);
  79. row.joueur2.socket.emit('lolheded');
  80. } else if(row.joueur2.socket.id === client.id) {
  81. console.log("Joueur déconnecté ("+row.joueur2.login+") ; socket id : "+client.id);
  82. row.joueur1.socket.emit('lolheded');
  83. }
  84. });
  85. });
  86. client.on('nextQuestion', function() {
  87. games.forEach(function(row) {
  88. if(row.joueur1.socket.id === client.id) {
  89. row.joueur2.socket.emit('qpass');
  90. } else if(row.joueur2.socket.id === client.id) {
  91. row.joueur1.socket.emit('qpass');
  92. }
  93. });
  94. })
  95. };
  96. // Initialisation
  97. function init() {
  98. // Le server temps réel écoute sur le port 8000
  99. server = io.listen(8000);
  100. // Gestion des évènements
  101. setEventHandlers();
  102. };
  103. // Lance l'initialisation
  104. init();