diff --git a/WEB/Client.php b/WEB/Client.php new file mode 100644 index 00000000..683b4384 --- /dev/null +++ b/WEB/Client.php @@ -0,0 +1,51 @@ +findUsersInQueue(); + $numberOfPlayer=count($userGroup); + header('Location : '.$rep.$vues['queue']); + } + } + else{ + echo "socket_read a échoué : " . socket_strerror(socket_last_error()) . "\n"; + break; + } + } + } \ No newline at end of file diff --git a/WEB/Client/Client.php b/WEB/Client/Client.php index 16d83e46..7b044828 100644 --- a/WEB/Client/Client.php +++ b/WEB/Client/Client.php @@ -13,27 +13,48 @@ class Client{ public function Queuing(){ global $port,$serverAdress,$rep,$vues, $BUFFER_SIZE; $userModel = new UserModel(); + sleep(5); // 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"); // 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"; + } else { + echo "socket_set_block a réussi.\n"; + } $result = socket_connect($socket, $serverAdress, $port) or die("Impossible de se connecter au serveur ERROR : ".socket_strerror(socket_last_error())."\n"); - $request="Queuing"; - socket_write($socket,$request,strlen($request)); - $response=""; - while(strcmp($response,"launchGame")!=0){ - $response=socket_read($socket, $BUFFER_SIZE); - if($response!=false) - { - if(strcmp($response,"refreshQueue")==0) + 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"; + } else { + echo "socket_connect a réussi.\n"; + $request="Queuing"; + $result=socket_write($socket,$request,strlen($request)); + if($result === false) { + echo "socket_write a échoué : " . socket_strerror(socket_last_error()) . "\n"; + } else { + echo "socket_write a réussi.\n"; + } + $response=""; + while(strcmp($response,"launchGame")!=0){ + $response=socket_read($socket, $BUFFER_SIZE); + if($response!=false) { - $userGroup = $userModel->findUsersInQueue(); - $numberOfPlayer=count($userGroup); - header('Location : '.$rep.$vues['Queue']); + echo "socket_read a réussi.\n"; + if(strcmp($response,"refreshQueue")==0) + { + $userGroup = $userModel->findUsersInQueue(); + $numberOfPlayer=count($userGroup); + header('Location : '.$rep.$vues['queue']); + } } - } - sleep(1); + else{ + echo "socket_read a échoué : " . socket_strerror(socket_last_error()) . "\n"; + break; + } + } } - socket_close($socket); } } \ No newline at end of file diff --git a/WEB/Controller/UserController.php b/WEB/Controller/UserController.php index 3eecc8e1..b0f05b48 100644 --- a/WEB/Controller/UserController.php +++ b/WEB/Controller/UserController.php @@ -176,7 +176,6 @@ class UserController $model->addToQueue(); $client = Client::getInstance(); $client->Queuing(); - header('Location: index.php?action=launchGame'); } catch (Exception $e) { $error = $e->getMessage(); require($rep . $vues['erreur']); diff --git a/WEB/Model/requestHandler.php b/WEB/Model/RequestHandler.php similarity index 78% rename from WEB/Model/requestHandler.php rename to WEB/Model/RequestHandler.php index ee6de61b..0a8cc1bc 100644 --- a/WEB/Model/requestHandler.php +++ b/WEB/Model/RequestHandler.php @@ -1,5 +1,5 @@ socketsFromQueue=array(); } - public function Queuing(Socket $socket,string $request){ + 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).'\n'; + // 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'; if(count($socketsFromQueue)==$playerNumberPerGame) { + echo 'lancement de la partie\n'; $response="launchGame"; $idPartie=$this->partie_gateway->findPartieInQueue(); - $arraySocketGroup[$idPartie]= $socketsFromQueue; - $arraySocketGroup[$this->partie_gateway->findPartieInQueue()]=$socketsFromQueue; + 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) { - socket_write($sock,$response,strlen($response)) or die("N'a pas pu écrire à la socket\n"); + var_dump($sock); + $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){ diff --git a/WEB/server.php b/WEB/server.php index 08a1f4f1..8e2ba21a 100644 --- a/WEB/server.php +++ b/WEB/server.php @@ -1,6 +1,7 @@ explode(' ',$request)[0]($client,$request); - } - else - { - $response="Invalid request"; + if ($client != false) { + if (in_array($client, $read)) { + $request = socket_read($client, $BUFFER_SIZE); + if ($request != false) { + $requestHandler = new RequestHandler(); + if (method_exists($requestHandler, $request)) { + $function=explode(' ',$request)[0]; + echo ($function."\n"); + $response = $requestHandler->$function($client, $request); + echo 'response : '.$response."\n"; + } else { + $response = "Invalid request"; + // socket_write($client,$response,strlen($response)); + } + } else { + $response = "Response is false"; // socket_write($client,$response,strlen($response)); } } - else - { - $response="Response is false"; - // socket_write($client,$response,strlen($response)); - } } } \ No newline at end of file