partie_gateway=new PartieGateway(); $this->arraySocketGroup=array(); $this->socketsFromQueue=array(); } public function Queuing($socket,string $request){ global $playerNumberPerGame; // Ajoute la connection à un tableau de connection des joueurs en attente $socketsFromQueue[]=$socket; 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.'(Queuing : RequestHandler)'; if(count($socketsFromQueue)==$playerNumberPerGame) { echo "lancement de la partie (Queuing : RequestHandler)\n"; $response="launchGame"; $idPartie=$this->partie_gateway->findPartieInQueue(); echo 'id de la partie : '.$idPartie ." (Queuing : RequestHandler)\n"; $arraySocketGroup[$idPartie]=$socketsFromQueue; $socketsFromQueue=array(); } else { echo "rafraichissement de la file d'attente (Queuing : RequestHandler)\n"; $response="refreshQueue"; } // var_dump($socketsFromQueue); // var_dump($response); foreach($socketsFromQueue as $sock) { // 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 (Queuing : RequestHandler)\n"; } } return $response; } public function quitQueue(Socket $client,String $request){ // supprime le socket de la liste des sockets en attente $socketsFromQueue=array_diff($this->socketsFromQueue, array($client)); $response="quitQueue"; // 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 (Queuing : RequestHandler)\n"); } } public function quitGame(Socket $client,String $request){ // supprime la socket de la liste des sockets en attente $this->arraySocketGroup=array_diff($this->arraySocketGroup, array($client)); $response="quitGame"; // 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 (Queuing : RequestHandler)\n"); } } public function refreshDashBoard(Socket $client,String $request){ $response="refreshDashBoard"; // 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 (Queuing : RequestHandler)\n"); } } public function finishGame(Socket $client,String $request){ // supprime la socket de la liste des sockets en attente $this->arraySocketGroup=array_diff($this->arraySocketGroup, array($client)); $response="finishGame"; // 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 (Queuing : RequestHandler)\n"); } } }