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.9KB

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