diff --git a/WEB/Client/Client.php b/WEB/Client/Client.php index 52993d68..e941fc42 100644 --- a/WEB/Client/Client.php +++ b/WEB/Client/Client.php @@ -16,49 +16,48 @@ class Client { global $port, $serverAdress, $rep, $vues, $BUFFER_SIZE; $userModel = new UserModel(); + // pas d'arrêt d'éxécution du script (No timeout) set_time_limit(0); - $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("la socket n'a pas pu être créée ERROR : " . socket_strerror(socket_last_error()) . "\n"); + $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("la socket n'a pas pu être créée ERROR : " . socket_strerror(socket_last_error()) . "(Client : Queuing) \n"); // connecter la socket à l'adresse ip et au port du serveur $result = socket_set_block($socket); if ($result === false) { - echo "socket_set_block a échoué : " . socket_strerror(socket_last_error()) . "\n"; + echo "socket_set_block a échoué : " . socket_strerror(socket_last_error()) . " (Client : Queuing)\n"; } else { - echo "socket_set_block a réussi.\n"; + echo "socket_set_block a réussi. (Client : Queuing) \n"; } - $result = socket_connect($socket, $serverAdress, $port) or die("Impossible de se connecter au serveur ERROR : " . socket_strerror(socket_last_error()) . "\n"); + $result = socket_connect($socket, $serverAdress, $port) or die("Impossible de se connecter au serveur ERROR : " . socket_strerror(socket_last_error()) . "(Client : Queuing) \n"); if ($result === false) { // La connexion de la socket à l'adresse et au port a échoué - echo "socket_connect a échoué : " . socket_strerror(socket_last_error()) . "\n"; + echo "socket_connect a échoué : " . socket_strerror(socket_last_error()) . "(Client : Queuing)\n"; } else { - echo "socket_connect a réussi.\n"; + echo "socket_connect a réussi. (Client : Queuing)\n"; $request = "Queuing"; $result = socket_write($socket, $request, strlen($request)); if ($result === false) { - echo "socket_write a échoué : " . socket_strerror(socket_last_error()) . "\n"; + echo "socket_write a échoué : " . socket_strerror(socket_last_error()) . " (Client : Queuing)\n"; } else { - echo "socket_write a réussi.\n"; - } - $response = ""; - $i = 0; - while ($i != 2) { - $response = socket_read($socket, $BUFFER_SIZE); - echo $response; - if ($response != false) { - echo "socket_read a réussi.\n"; - if (strcmp($response, "refreshQueue") == 0) { - $userGroup = $userModel->findUsersInQueue(); - $numberOfPlayer = count($userGroup); - header('Location : ' . $rep . $vues['queue']); - } - } else { - echo "socket_read a échoué : " . socket_strerror(socket_last_error()) . "\n"; - break; - } - sleep(5); - $i++; + echo "socket_write a réussi.(Client : Queuing)\n"; } - require $rep . $vues['erreur']; + $response = "AAA"; + // $response = socket_read($socket, $BUFFER_SIZE); + echo $response; + // while (strcmp($response, "launchGame") != 0) { + // $response = socket_read($socket, $BUFFER_SIZE); + // if ($response != false) { + // echo "socket_read a réussi.\n"; + // if (strcmp($response, "refreshQueue") == 0) { + // // $userGroup = $userModel->findUsersInQueue(); + // // $numberOfPlayer=count($userGroup); + // header('Location : ' . $rep . $vues['main']); + // break; + // } + // } else { + // echo "socket_read a échoué : " . socket_strerror(socket_last_error()) . "\n"; + // break; + // } + // } } } } \ No newline at end of file diff --git a/WEB/Config/Config.php b/WEB/Config/Config.php index 16c6853e..580d46cb 100644 --- a/WEB/Config/Config.php +++ b/WEB/Config/Config.php @@ -29,7 +29,7 @@ $vues['adminSolo'] = 'View/src/pages/Admin/AdminSolo.php'; $vues['seeOrdre'] = 'View/src/pages/Admin/SeeOrdre.php'; $vues['modifOrdre'] = 'View/src/pages/Admin/ModifOrdre.php'; $vues['partie'] = 'View/src/pages/Multijoueur/Partie.php'; -$vues['queue'] = 'View/src/pages/Multijoueur/Queue.php'; +$vues['queue'] = 'View/src/pages/Multijoueur/FileAttente.php'; // Enigme $vues['enigmePage'] = 'View/src/pages/Enigme/EnigmePage.php'; @@ -37,7 +37,7 @@ $vues['enigmePage'] = 'View/src/pages/Enigme/EnigmePage.php'; $BUFFER_SIZE = 1024; $serverAdress = "82.165.180.114"; $port= "3000"; -$playerNumberPerGame=2; +$playerNumberPerGame=3; //modules $modules = 'node_module/'; diff --git a/WEB/Controller/EnigmeGateway.php b/WEB/Controller/EnigmeGateway.php index f9545f15..481deda5 100644 --- a/WEB/Controller/EnigmeGateway.php +++ b/WEB/Controller/EnigmeGateway.php @@ -169,6 +169,18 @@ class EnigmeGateway $tabEnigme=EnigmeFactory::create($results); return $tabEnigme; } + + public function getRandomEnigme() : Enigme + { + $query = "SELECT * FROM Enigme WHERE ordre = 0 ORDER BY RANDOM() LIMIT 1"; + $this->con->executequery($query); + $results = $this->con->getResults(); + if (empty($results)){ + throw new Exception("Aucune énigme mulitijoeur n'est disponible"); + } + $tabEnigme=EnigmeFactory::create($results); + return $tabEnigme[0]; + } public function showAll(): void { $query = "SELECT * FROM Enigme"; diff --git a/WEB/Controller/PartieGateway.php b/WEB/Controller/PartieGateway.php index 8de62459..b03b3d3c 100644 --- a/WEB/Controller/PartieGateway.php +++ b/WEB/Controller/PartieGateway.php @@ -9,9 +9,9 @@ class PartieGateway public function __construct() { global $dsn, $rep, $vues, $error; - try{ - $con = new Connection($dsn); - $this->con = $con; + try { + $con = new Connection($dsn); + $this->con = $con; } catch (Exception $e) { $error = $e->getMessage(); require($rep . $vues['erreur']); @@ -21,7 +21,8 @@ class PartieGateway /** * @param array $listeUtilisateur */ - public function partieInQueueExists() : bool{ + public function partieInQueueExists(): bool + { $query = "SELECT count(*) FROM PARTICIPER WHERE etat = 0"; $this->con->executeQuery($query); $results = $this->con->getResults(); @@ -31,174 +32,283 @@ class PartieGateway return true; } - public function findPartieMaxId() : int{ + public function findPartieMaxId(): int + { $query = "SELECT max(id) FROM Partie"; $this->con->executeQuery($query); - $results=$this->con->getResults(); - if ($results[0]['max(id)']==NULL) + $results = $this->con->getResults(); + if ($results[0]['max(id)'] == NULL) return 0; else return $results[0]['max(id)']; } - public function creerPartieMulti(int $max, array $tabEnigme) : Partie{ - $partie=PartieFactory::createPartieMulti($max+1,$tabEnigme); - $query= "INSERT INTO Partie VALUES (:idPartie,CURRENT_DATE)"; - $this->con->executeQuery($query, array(':idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER))); - if (count($partie->getListeEnigme()) != 0) { - foreach ($partie->getListeEnigme() as $Enigme) { - $query = "INSERT INTO Contenir VALUES (:idPartie, :idEnigme)"; - $this->con->executeQuery($query, array( - ':idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER), - ':idEnigme' => array($Enigme->getIdEnigme(), SQLITE3_INTEGER) - ) - ); - } - } - return $partie; - } + // public function creerPartieMulti(int $max, array $tabEnigme) : Partie{ + // $partie=PartieFactory::createPartieMulti($max+1,$tabEnigme); + // $query= "INSERT INTO Partie VALUES (:idPartie,CURRENT_DATE)"; + // $this->con->executeQuery($query, array(':idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER))); + // if (count($partie->getListeEnigme()) != 0) { + // foreach ($partie->getListeEnigme() as $Enigme) { + // $query = "INSERT INTO Contenir VALUES (:idPartie, :idEnigme)"; + // $this->con->executeQuery($query, array( + // ':idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER), + // ':idEnigme' => array($Enigme->getIdEnigme(), SQLITE3_INTEGER) + // ) + // ); + // } + // } + // return $partie; + // } - public function rejoindrePartieMulti(int $idPartieInQueue,array $tabEnigme) : Partie{ - $partie = PartieFactory::createPartieMulti($idPartieInQueue,$tabEnigme); + public function rejoindrePartieMulti(int $idPartieInQueue, array $tabEnigme): Partie + { + $partie = PartieFactory::createPartieMulti($idPartieInQueue, $tabEnigme); return $partie; } - public function findPartieInQueue(){ - $query = "SELECT p.id - FROM Partie p, Participer pa - WHERE pa.etat=0 - AND pa.partie=p.id + public function findPartieInQueue() + { + $query = "SELECT partie + FROM Participer + WHERE etat=0 LIMIT 1"; $this->con->executeQuery($query); $results = $this->con->getResults(); - return $results[0]['id']; + if (empty($results)) { + return 0; + } + return $results[0]['partie']; } - public function creerPartieSolo(Utilisateur $utilisateur){ + public function creerPartieSolo(Utilisateur $utilisateur) + { $query = "SELECT * FROM Enigme WHERE points IS NULL OR points = 0"; $this->con->executeQuery($query); $results = $this->con->getResults(); - $query= "SELECT max(p.id) + $query = "SELECT max(p.id) FROM PARTIE p;"; $this->con->executeQuery($query); - $max=$this->con->getResults()[0]["max"]; - $partie=PartieFactory::createPartieSolo($max,$results); - $query= "INSERT INTO Partie VALUES (:idPartie,:idEnigme)"; + $max = $this->con->getResults()[0]["max"]; + $partie = PartieFactory::createPartieSolo($max, $results); + $query = "INSERT INTO Partie VALUES (:idPartie,:idEnigme)"; $this->con->executeQuery($query, array(':idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER))); - foreach($partie->getListeEnigme() as $Enigme){ - $query= "INSERT INTO Contenir VALUES (:idPartie, :idEnigme)"; + foreach ($partie->getListeEnigme() as $Enigme) { + $query = "INSERT INTO Contenir VALUES (:idPartie, :idEnigme)"; $this->con->executeQuery($query, array( - ':idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER), - ':idEnigme' => array($Enigme->getIdEnigme(), SQLITE3_INTEGER))); + ':idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER), + ':idEnigme' => array($Enigme->getIdEnigme(), SQLITE3_INTEGER) + ) + ); } - foreach($partie->getListeEnigme() as $Enigme){ - $query= "INSERT INTO Contenir VALUES (:idPartie, :idEnigme)"; + foreach ($partie->getListeEnigme() as $Enigme) { + $query = "INSERT INTO Contenir VALUES (:idPartie, :idEnigme)"; $this->con->executeQuery($query, array( - ':idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER), - ':idEnigme' => array($Enigme->getIdEnigme(), SQLITE3_INTEGER))); + ':idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER), + ':idEnigme' => array($Enigme->getIdEnigme(), SQLITE3_INTEGER) + ) + ); } - $query= "INSERT INTO Participer VALUES (:idPartie, :idUtilisateur, TRUE)"; + $query = "INSERT INTO Participer VALUES (:idPartie, :idUtilisateur, TRUE)"; $this->con->executeQuery($query, array( - 'idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER), - 'idUtilisateur' => array($utilisateur->getEmail(), SQLITE3_INTEGER))); + 'idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER), + 'idUtilisateur' => array($utilisateur->getEmail(), SQLITE3_INTEGER) + ) + ); } - public function findLastPartie() : Partie + public function findLastPartie(): Partie { $query = "SELECT * FROM Partie ORDER BY id DESC LIMIT 1"; $this->con->executequery($query); $results = $this->con->getResults(); $row = $results[0]; - $partie=new Partie($row['id'],array()); + $partie = new Partie($row['id'], array()); $date = new DateTime($row['dateDebut']); $partie->setDatePartie($date); return $partie; } - public function createPartie(Enigme $enigme, Utilisateur $utilisateur){ - $query="INSERT INTO Partie VALUES (NULL,:date)"; + public function createPartie(Enigme $enigme, Utilisateur $utilisateur) + { + $query = "INSERT INTO Partie VALUES (NULL,:date)"; + $currentDate = date('Y-m-d H:i:s'); + $this->con->executeQuery($query, array( + "date" => array($currentDate, SQLITE3_TEXT) + ) + ); + $partie = $this->findLastPartie(); + $query = "INSERT INTO Contenir VALUES (:partie,:idEnigme,NULL)"; + $this->con->executeQuery($query, array( + "partie" => array($partie->getIdPartie(), SQLITE3_INTEGER), + "idEnigme" => array($enigme->getIdEnigme(), SQLITE3_INTEGER) + ) + ); + $query = "INSERT INTO Participer VALUES (:partie,:utilisateur,NULL)"; + $this->con->executeQuery($query, array( + "partie" => array($partie->getIdPartie(), SQLITE3_INTEGER), + "utilisateur" => array($utilisateur->getEmail(), SQLITE3_TEXT) + ) + ); + } + + public function createPartieMulti(Enigme $enigme, string $mailUtilisateur) + { + $query = "INSERT INTO Partie VALUES (NULL,:date)"; $currentDate = date('Y-m-d H:i:s'); $this->con->executeQuery($query, array( - "date" => array($currentDate, SQLITE3_TEXT))); + "date" => array($currentDate, SQLITE3_TEXT) + ) + ); $partie = $this->findLastPartie(); - $query="INSERT INTO Contenir VALUES (:partie,:idEnigme,NULL)"; + $query = "INSERT INTO Contenir VALUES (:partie,:idEnigme,1)"; $this->con->executeQuery($query, array( "partie" => array($partie->getIdPartie(), SQLITE3_INTEGER), - "idEnigme" => array($enigme->getIdEnigme(), SQLITE3_INTEGER))); - $query="INSERT INTO Participer VALUES (:partie,:utilisateur,NULL)"; + "idEnigme" => array($enigme->getIdEnigme(), SQLITE3_INTEGER) + ) + ); + $query = "INSERT INTO Participer VALUES (:partie,:utilisateur,0)"; $this->con->executeQuery($query, array( "partie" => array($partie->getIdPartie(), SQLITE3_INTEGER), - "utilisateur" => array($utilisateur->getEmail(), SQLITE3_TEXT))); + "utilisateur" => array($mailUtilisateur, SQLITE3_TEXT) + ) + ); } - public function delete(int $idPartie){ - $query= "DELETE FROM Contenir WHERE partie = :enigmeId"; + public function delete(int $idPartie) + { + $query = "DELETE FROM Contenir WHERE partie = :enigmeId"; $this->con->executeQuery($query, array(':enigmeId' => array($idPartie, SQLITE3_INTEGER))); - $query= "DELETE FROM Participer WHERE partie = :enigmeId"; + $query = "DELETE FROM Participer WHERE partie = :enigmeId"; $this->con->executeQuery($query, array(':enigmeId' => array($idPartie, SQLITE3_INTEGER))); - $query= "DELETE FROM Partie WHERE id = :idPartie"; + $query = "DELETE FROM Partie WHERE id = :idPartie"; $this->con->executeQuery($query, array(':idPartie' => array($idPartie, SQLITE3_INTEGER))); } - public function deleteByEnigme(int $enigmeId){ - $query="SELECT partie FROM Contenir WHERE enigme = :enigmeId"; + public function deleteByEnigme(int $enigmeId) + { + $query = "SELECT partie FROM Contenir WHERE enigme = :enigmeId"; $this->con->executeQuery($query, array(':enigmeId' => array($enigmeId, SQLITE3_INTEGER))); $results = $this->con->getResults(); - $query= "DELETE FROM Contenir WHERE enigme = :enigmeId"; + $query = "DELETE FROM Contenir WHERE enigme = :enigmeId"; $this->con->executeQuery($query, array(':enigmeId' => array($enigmeId, SQLITE3_INTEGER))); - foreach($results as $row){ - $query="DELETE FROM Participer WHERE partie = :partieId"; + foreach ($results as $row) { + $query = "DELETE FROM Participer WHERE partie = :partieId"; $this->con->executeQuery($query, array(':partieId' => array($row['partie'], SQLITE3_INTEGER))); - $query= "DELETE FROM Partie WHERE id = :partieId"; + $query = "DELETE FROM Partie WHERE id = :partieId"; $this->con->executeQuery($query, array(':partieId' => array($row['partie'], SQLITE3_INTEGER))); } } - public function findPartieHistory() : array{ - $query="SELECT * FROM Partie"; + public function findPartieHistory(): array + { + $query = "SELECT * FROM Partie"; $this->con->executeQuery($query); $results = $this->con->getResults(); - $query= "SELECT max(p.id) + $query = "SELECT max(p.id) FROM PARTIE p;"; $this->con->executeQuery($query); - $max=$this->con->getResults()[0]["max"]; - $listePartieHistory=array(); - foreach($results as $row) - { + $max = $this->con->getResults()[0]["max"]; + $listePartieHistory = array(); + foreach ($results as $row) { $query = "SELECT e.* FROM Enigme e,Contenir c,Partie p WHERE p.id = c.partie AND c.enigme = e.id AND c.enCours = false; AND p.partie = :idPartie"; - $this->con->executeQuery($query,array( - "idPartie" => array($row["idPartie"],SQLITE3_INTEGER) - )); - $historiquePartie=$this->con->getResults(); - $listePartieHistory[]=PartieFactory::createPartieHistory($row["idPartie"],$historiquePartie); + $this->con->executeQuery($query, array( + "idPartie" => array($row["idPartie"], SQLITE3_INTEGER) + ) + ); + $historiquePartie = $this->con->getResults(); + $listePartieHistory[] = PartieFactory::createPartieHistory($row["idPartie"], $historiquePartie); } return $listePartieHistory; } - public function findPartieByEnigmeId(int $enigmeId) : Partie{ + public function findPartieByEnigmeId(int $enigmeId): Partie + { $query = "SELECT * FROM Partie p, Resoudre r WHERE r.enigme = :enigmeId AND r.partie = p.id"; $this->con->executeQuery($query, array( ':enigmeId' => array($enigmeId, SQLITE3_INTEGER) - )); + ) + ); $results = $this->con->getResults(); $row = $results[0]; - $partie=new Partie($row['id'],array()); + $partie = new Partie($row['id'], array()); $date = new DateTime($row['dateDebut']); $partie->setDatePartie($date); return $partie; } - public function showAll() : void{ - $query= "SELECT * FROM Partie"; + public function addToPartie(string $mailUtilisateur, int $idPartie) + { + global $playerNumberPerGame; + $player = $this->getPlayerNumber($idPartie); + if ($player == $playerNumberPerGame) { + throw new Exception("La partie est pleine"); + } + if ($player + 1 == $playerNumberPerGame) { + echo "La partie est all\n"; + $query = "INSERT INTO Participer VALUES (:partie,:utilisateur,1)"; + $this->con->executeQuery($query, array( + "partie" => array($idPartie, SQLITE3_INTEGER), + "utilisateur" => array($mailUtilisateur, SQLITE3_TEXT))); + } + else { + echo "La partie n'est pas all\n"; + $query = "INSERT INTO Participer VALUES (:partie,:utilisateur,0)"; + $this->con->executeQuery($query, array( + "partie" => array($idPartie, SQLITE3_INTEGER), + "utilisateur" => array($mailUtilisateur, SQLITE3_TEXT))); + } + } + public function getPlayerNumber(int $idPartie): int + { + $query = "SELECT count(*) FROM Participer WHERE partie = :idPartie"; + $this->con->executeQuery($query, array( + "idPartie" => array($idPartie, SQLITE3_INTEGER) + ) + ); + $results = $this->con->getResults(); + $row = $results[0]; + return $row['count(*)']; + } + public function getEtat($idPartie){ + $query = "SELECT etat FROM Participer WHERE partie = :idPartie"; + $this->con->executeQuery($query, array( + "idPartie" => array($idPartie, SQLITE3_INTEGER) + ) + ); + $results = $this->con->getResults(); + foreach ($results as $row){ + if($row['etat'] == 1){ + return 1; + } + } + return 0; + } + + public function getLesMailJoueurs($idPartie){ + $query = "SELECT utilisateur FROM Participer WHERE partie = :idPartie"; + $this->con->executeQuery($query, array( + "idPartie" => array($idPartie, SQLITE3_INTEGER) + ) + ); + $results = $this->con->getResults(); + $lesJoueurs = array(); + foreach ($results as $row){ + $lesJoueurs[] = $row['utilisateur']; + } + return $lesJoueurs; + } + public function showAll(): void + { + $query = "SELECT * FROM Partie"; $this->con->executeQuery($query); - $results=$this->con->getResults(); + $results = $this->con->getResults(); foreach ($results as $row) { echo $row['idPartie'] . ''; } diff --git a/WEB/Controller/UserController.php b/WEB/Controller/UserController.php index 5755ed37..7098f692 100644 --- a/WEB/Controller/UserController.php +++ b/WEB/Controller/UserController.php @@ -34,6 +34,9 @@ class UserController case "goToQueue": $this->goToQueue(); break; + case "queuing": + $this->queuing(); + break; case "logout": $this->logout(); break; @@ -169,18 +172,41 @@ class UserController public function goToQueue() { try { - global $rep, $vues, $error; //$serverAdress,$port; - $model = new UserModel(); - // $model->addToQueue(); - $client = Client::getInstance(); - // new Queuing(); - $client->Queuing(); + global $rep, $vues, $error; require($rep . $vues['queue']); } catch (Exception $e) { $error = $e->getMessage(); require($rep . $vues['erreur']); } } + public function queuing(){ + try { + global $rep, $vues, $error; + $model = new UserModel(); + $utilisateur = $_SESSION['utilisateur']; + $reponse = $model->addToQueue($utilisateur->getEmail()); + $etat = $reponse[1]; + echo $etat. " etat\n"; + $idPartie = $reponse[0]; + echo $idPartie . " idPartie\n"; + if($etat == 1){ + // header("Location: index.php?action=launchGame"); + $lesJoeurs = $model->getLesJoueurs($idPartie); + sleep(30); + header("Location: index.php?action=goToPresentation"); + } + else{ + while ($etat == 0){ + sleep(5); + $etat = $model->getEtatPartie($idPartie); + } + header("Location: index.php?action=goToPresentation"); + } + } catch (Exception $e) { + $error = $e->getMessage(); + require($rep . $vues['erreur']); + } + } public function launchGame(){ try { global $rep, $vues, $error; diff --git a/WEB/Model/RequestHandler.php b/WEB/Model/RequestHandler.php index 0a8cc1bc..0b8f7e0e 100644 --- a/WEB/Model/RequestHandler.php +++ b/WEB/Model/RequestHandler.php @@ -17,39 +17,41 @@ class RequestHandler{ $socketsFromQueue[]=$socket; - echo 'ajout de la connecion au tableau des connections en attente'.count($socketsFromQueue).'\n'; + echo 'ajout de la connecion au tableau des connections en attente'.count($socketsFromQueue). '(Queuing : RequestHandler)'; // si le nombre de joueur par partie nécessaire est égal au nombre de connection encore dans la file d'attente // alors envoie à l'utilisateur de lancer la partie et ajoute l'ensemble de connection à un tableau de groupe de sockets avec comme paire clés valeurs // l'identifiant de la partie et l'ensemble de connections sinon envoie à tout les utilisateurs en file d'attente qu'il faut rafraichir la page de la file d'attente - echo 'nombre de joueurs en attente : '.count($socketsFromQueue).' nombre de joueurs par partie : '.$playerNumberPerGame.'\n'; + echo 'nombre de joueurs en attente : '.count($socketsFromQueue).' nombre de joueurs par partie : '.$playerNumberPerGame.'(Queuing : RequestHandler)'; if(count($socketsFromQueue)==$playerNumberPerGame) { - echo 'lancement de la partie\n'; + echo "lancement de la partie (Queuing : RequestHandler)\n"; $response="launchGame"; $idPartie=$this->partie_gateway->findPartieInQueue(); - echo 'id de la partie : '.$idPartie; + echo 'id de la partie : '.$idPartie ." (Queuing : RequestHandler)\n"; $arraySocketGroup[$idPartie]=$socketsFromQueue; $socketsFromQueue=array(); } else { - echo "rafraichissement de la file d'attente\n"; + echo "rafraichissement de la file d'attente (Queuing : RequestHandler)\n"; $response="refreshQueue"; } - var_dump($socketsFromQueue); - var_dump($response); + // var_dump($socketsFromQueue); + // var_dump($response); foreach($socketsFromQueue as $sock) { - var_dump($sock); - $result=socket_write($sock,$response,strlen($response)) or die("N'a pas pu écrire à la socket\n"); - var_dump($result); + // var_dump($sock); + echo 'envoie de la réponse au client : '.$response ." (Queuing : RequestHandler)\n"; + $result=socket_write($sock,$response,strlen($response)) or die("N'a pas pu écrire à la socket (Queuing : RequestHandler)\n"); + // var_dump($result); if($result==false) { - echo "erreur d'écriture\n"; + echo "erreur d'écriture (Queuing : RequestHandler)\n"; } } + return $response; } public function quitQueue(Socket $client,String $request){ // supprime le socket de la liste des sockets en attente @@ -58,7 +60,7 @@ class RequestHandler{ // envoie à tous les utilisateurs en attente de rafraichir la page foreach($socketsFromQueue as $socket) { - socket_write($socket, $response, strlen($response)) or die("N'a pas pu envoyer la réponse au client\n"); + socket_write($socket, $response, strlen($response)) or die("N'a pas pu envoyer la réponse au client (Queuing : RequestHandler)\n"); } } public function quitGame(Socket $client,String $request){ @@ -68,7 +70,7 @@ class RequestHandler{ // envoie à tous les utilisateurs en attente de rafraichir la page foreach($this->arraySocketGroup[explode(" ",$request)[1]] as $socket) { - socket_write($socket, $response, strlen($response)) or die("N'a pas pu envoyer la réponse au client\n"); + socket_write($socket, $response, strlen($response)) or die("N'a pas pu envoyer la réponse au client (Queuing : RequestHandler)\n"); } } public function refreshDashBoard(Socket $client,String $request){ @@ -76,7 +78,7 @@ class RequestHandler{ // envoie à tous les utilisateurs en attente de rafraichir la page foreach($this->arraySocketGroup[explode(" ",$request)[1]] as $socket) { - socket_write($socket, $response, strlen($response)) or die("N'a pas pu envoyer la réponse au client\n"); + socket_write($socket, $response, strlen($response)) or die("N'a pas pu envoyer la réponse au client (Queuing : RequestHandler)\n"); } } public function finishGame(Socket $client,String $request){ @@ -86,7 +88,7 @@ class RequestHandler{ // envoie à tous les utilisateurs en attente de rafraichir la page foreach($this->arraySocketGroup[explode(" ",$request)[1]] as $socket) { - socket_write($socket, $response, strlen($response)) or die("N'a pas pu envoyer la réponse au client\n"); + socket_write($socket, $response, strlen($response)) or die("N'a pas pu envoyer la réponse au client (Queuing : RequestHandler)\n"); } } } \ No newline at end of file diff --git a/WEB/Model/UserModel.php b/WEB/Model/UserModel.php index b178ccb4..de336288 100644 --- a/WEB/Model/UserModel.php +++ b/WEB/Model/UserModel.php @@ -24,35 +24,51 @@ class UserModel require($rep . $view['erreur']); } } - public function addToQueue() - { - echo '1'; - $utilisateur = $_SESSION['utilisateur']; - if ($this->utilisateur_gateway->isAlreadyInqueue($utilisateur)) { - var_dump($this->utilisateur_gateway->queueFilled()); - if($this->utilisateur_gateway->queueFilled()) - { - header('Location: index.php?action=launchGame'); - } - return; + // public function addToQueue() + // { + // echo '1'; + // $utilisateur = $_SESSION['utilisateur']; + // if ($this->utilisateur_gateway->isAlreadyInqueue($utilisateur)) { + // var_dump($this->utilisateur_gateway->queueFilled()); + // if($this->utilisateur_gateway->queueFilled()) + // { + // header('Location: index.php?action=launchGame'); + // } + // return; + // } + // echo '2'; + // if (!$this->partie_gateway->partieInQueueExists()) { + // echo '3'; + // $tabEnigme = $this->enigme_gateway->findMultiEnigma(); + // $idNewPartie = $this->partie_gateway->findPartieMaxId(); + // $partie = $this->partie_gateway->creerPartieMulti($idNewPartie, $tabEnigme); + // } else { + // echo '4'; + // $idPartieInQueue = $this->partie_gateway->findPartieInQueue(); + // echo '5'; + // $tabEnigme = $this->enigme_gateway->findEnigmaFromPartie($idPartieInQueue); + // echo '6'; + // $partie = $this->partie_gateway->rejoindrePartieMulti($idPartieInQueue, $tabEnigme); + // echo '7'; + // } + // echo '8'; + // $this->utilisateur_gateway->addToQueue($utilisateur, $partie); + // } + + public function addToQueue($mailUtilisateur) : array{ + $idPartie=$this->partie_gateway->findPartieInQueue(); + if ($idPartie == 0){ + $enigme= $this->enigme_gateway->getRandomEnigme(); + $this->partie_gateway->createPartieMulti($enigme, $mailUtilisateur); + $idPartie=$this->partie_gateway->findPartieInQueue(); + $etat=$this->partie_gateway->getEtat($idPartie); + return array($idPartie, $etat); } - echo '2'; - if (!$this->partie_gateway->partieInQueueExists()) { - echo '3'; - $tabEnigme = $this->enigme_gateway->findMultiEnigma(); - $idNewPartie = $this->partie_gateway->findPartieMaxId(); - $partie = $this->partie_gateway->creerPartieMulti($idNewPartie, $tabEnigme); - } else { - echo '4'; - $idPartieInQueue = $this->partie_gateway->findPartieInQueue(); - echo '5'; - $tabEnigme = $this->enigme_gateway->findEnigmaFromPartie($idPartieInQueue); - echo '6'; - $partie = $this->partie_gateway->rejoindrePartieMulti($idPartieInQueue, $tabEnigme); - echo '7'; + else{ + $this->partie_gateway->addToPartie($mailUtilisateur, $idPartie); + $etat=$this->partie_gateway->getEtat($idPartie); + return array($idPartie, $etat); } - echo '8'; - $this->utilisateur_gateway->addToQueue($utilisateur, $partie); } public function findUserGroup() : int { @@ -124,4 +140,17 @@ class UserModel } return $this->enigme_gateway->findById($id)[0]; } + + public function getEtatPartie($idPartie){ + return $this->partie_gateway->getEtat($idPartie); + } + + public function getLesJoueurs($idPartie){ + $lesMailJoeurs = $this->partie_gateway->getLesMailJoueurs($idPartie); + $lesJoueurs = array(); + foreach ($lesMailJoeurs as $mail){ + $lesJoueurs[] = $this->utilisateur_gateway->getUtilisateurByEmail($mail); + } + return $lesJoueurs; + } } \ No newline at end of file diff --git a/WEB/View/src/pages/Multijoueur/FileAttente.php b/WEB/View/src/pages/Multijoueur/FileAttente.php new file mode 100644 index 00000000..ff335743 --- /dev/null +++ b/WEB/View/src/pages/Multijoueur/FileAttente.php @@ -0,0 +1,95 @@ + + +
+ + +Player 2
'; + } + ?> +Player 2
'; + } + ?> +Player 2
'; + } + ?> +