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 5.0KB

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