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); // 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; if(count($socketsFromQueue)==$playerNumberPerGame) { echo 'lancement de la partie\n'; $response="launchGame"; $idPartie=$this->partie_gateway->findPartieInQueue(); echo 'id de la partie : '.$idPartie; $arraySocketGroup[$idPartie]=$socketsFromQueue; $socketsFromQueue=array(); } else { echo "rafraichissement de la file d'attente\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; $result=socket_write($sock,$response,strlen($response)) or die("N'a pas pu écrire à la socket\n"); // var_dump($result); if($result==false) { echo "erreur d'écriture\n"; } } } 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\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\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\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\n"); } } }