Merge branch 'master' of https://codefirst.iut.uca.fr/git/nathan.boileau/Scripted
continuous-integration/drone/push Build is passing Details

ServeurDeTest
Noé GARNIER 2 years ago
commit 2124db558e

@ -0,0 +1,51 @@
<?php
require_once('./Config/Config.php');
require_once('./Config/Autoload.php');
Autoload::charger();
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");
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)
{
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;
}
}
}

@ -13,27 +13,48 @@ class Client{
public function Queuing(){ public function Queuing(){
global $port,$serverAdress,$rep,$vues, $BUFFER_SIZE; global $port,$serverAdress,$rep,$vues, $BUFFER_SIZE;
$userModel = new UserModel(); $userModel = new UserModel();
sleep(5);
// pas d'arrêt d'éxécution du script (No timeout) // pas d'arrêt d'éxécution du script (No timeout)
set_time_limit(0); 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())."\n");
// connecter la socket à l'adresse ip et au port du serveur // 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"); $result = socket_connect($socket, $serverAdress, $port) or die("Impossible de se connecter au serveur ERROR : ".socket_strerror(socket_last_error())."\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";
} else {
echo "socket_connect a réussi.\n";
$request="Queuing"; $request="Queuing";
socket_write($socket,$request,strlen($request)); $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=""; $response="";
while(strcmp($response,"launchGame")!=0){ while(strcmp($response,"launchGame")!=0){
$response=socket_read($socket, $BUFFER_SIZE); $response=socket_read($socket, $BUFFER_SIZE);
if($response!=false) if($response!=false)
{ {
echo "socket_read a réussi.\n";
if(strcmp($response,"refreshQueue")==0) if(strcmp($response,"refreshQueue")==0)
{ {
$userGroup = $userModel->findUsersInQueue(); $userGroup = $userModel->findUsersInQueue();
$numberOfPlayer=count($userGroup); $numberOfPlayer=count($userGroup);
header('Location : '.$rep.$vues['Queue']); header('Location : '.$rep.$vues['queue']);
}
}
else{
echo "socket_read a échoué : " . socket_strerror(socket_last_error()) . "\n";
break;
} }
} }
sleep(1);
} }
socket_close($socket);
} }
} }

@ -176,7 +176,6 @@ class UserController
$model->addToQueue(); $model->addToQueue();
$client = Client::getInstance(); $client = Client::getInstance();
$client->Queuing(); $client->Queuing();
header('Location: index.php?action=launchGame');
} catch (Exception $e) { } catch (Exception $e) {
$error = $e->getMessage(); $error = $e->getMessage();
require($rep . $vues['erreur']); require($rep . $vues['erreur']);

@ -1,5 +1,5 @@
<?php <?php
class requestHandler{ class RequestHandler{
private PartieGateway $partie_gateway; private PartieGateway $partie_gateway;
private array $arraySocketGroup; private array $arraySocketGroup;
private array $socketsFromQueue; private array $socketsFromQueue;
@ -10,32 +10,45 @@ class requestHandler{
$this->socketsFromQueue=array(); $this->socketsFromQueue=array();
} }
public function Queuing(Socket $socket,string $request){ public function Queuing($socket,string $request){
global $playerNumberPerGame; global $playerNumberPerGame;
// Ajoute la connection à un tableau de connection des joueurs en attente // Ajoute la connection à un tableau de connection des joueurs en attente
$socketsFromQueue[]=$socket; $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 // 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 // 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 // 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) if(count($socketsFromQueue)==$playerNumberPerGame)
{ {
echo 'lancement de la partie\n';
$response="launchGame"; $response="launchGame";
$idPartie=$this->partie_gateway->findPartieInQueue(); $idPartie=$this->partie_gateway->findPartieInQueue();
$arraySocketGroup[$idPartie]= $socketsFromQueue; echo 'id de la partie : '.$idPartie;
$arraySocketGroup[$this->partie_gateway->findPartieInQueue()]=$socketsFromQueue; $arraySocketGroup[$idPartie]=$socketsFromQueue;
$socketsFromQueue=array(); $socketsFromQueue=array();
} }
else else
{ {
echo "rafraichissement de la file d'attente\n";
$response="refreshQueue"; $response="refreshQueue";
} }
var_dump($socketsFromQueue);
var_dump($response);
foreach($socketsFromQueue as $sock) 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){ public function quitQueue(Socket $client,String $request){

@ -1,6 +1,7 @@
<?php <?php
require_once('./Config/Config.php'); require_once('./Config/Config.php');
require_once('./Config/Autoload.php'); require_once('./Config/Autoload.php');
require_once('./Model/RequestHandler.php');
Autoload::charger(); Autoload::charger();
global $serverAdress,$port,$playerNumberPerGame; global $serverAdress,$port,$playerNumberPerGame;
@ -15,12 +16,32 @@ ob_implicit_flush();
// Créer une socket d'écoute // Créer une socket d'écoute
$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())."\n");
if($socket===false)
{
echo "socket_create a échoué : " . socket_strerror(socket_last_error()) . "\n";
} else {
echo "socket_create a réussi.\n";
}
// Attacher la socket à unde adresse ip et un port // Attacher la socket à unde adresse ip et un port
$result = socket_bind($socket, $serverAdress, $port) or die("la socket n'a pas pu être attachée à l'adresse ip et au port ERROR : ".socket_strerror(socket_last_error())."\n"); $result = socket_bind($socket, $serverAdress, $port) or die("la socket n'a pas pu être attachée à l'adresse ip :".$serverAdress." et au port".$port." ERROR : ".socket_strerror(socket_last_error())."\n");
if ($result === false) {
// L'attachement de la socket à l'adresse et au port a échoué
echo "socket_bind a échoué : " . socket_strerror(socket_last_error()) . "\n";
} else {
echo "socket_bind a réussi.\n";
// L'attachement de la socket à l'adresse et au port a réussi
}
socket_set_block($socket) or die("N'a pas pu mettre la socket en mode bloquant ERROR : ".socket_strerror(socket_last_error())."\n"); $result=socket_set_block($socket) or die("N'a pas pu mettre la socket en mode bloquant ERROR : ".socket_strerror(socket_last_error())."\n");
if ($result === false) {
// La mise en mode bloquant de la socket a échoué
echo "socket_set_block a échoué : " . socket_strerror(socket_last_error()) . "\n";
} else {
echo "socket_set_block a réussi.\n";
// La mise en mode bloquant de la socket a réussi
}
// tableau des sockets à surveiller en lecture // tableau des sockets à surveiller en lecture
$read=array($socket); $read=array($socket);
@ -41,50 +62,61 @@ $response='';
$request=''; $request='';
$client=false;
while(true) { while(true) {
// Commencer à écouter sur le port // Commencer à écouter sur le port
$result = socket_listen($socket, 10) or die ("N'a pas pu configurer l'écoute sur la socket ERROR : ".socket_strerror(socket_last_error())."\n"); $result = socket_listen($socket, 10) or die ("N'a pas pu configurer l'écoute sur la socket ERROR : ".socket_strerror(socket_last_error())."\n");
if ($result === false) {
// L'écoute sur le port a échoué
echo "socket_listen a échoué : " . socket_strerror(socket_last_error()) . "\n";
} else {
echo "socket listen sur le port :".$port."\n";
// L'écoute sur le port a réussi
}
//Si c'est une connection entrante, on la rajoute à la liste des sockets à surveiller //Si c'est une connection entrante, on la rajoute à la liste des sockets à surveiller
if(in_array($socket,$read)) if(in_array($socket,$read))
{ {
// Accepter la connection entrante // Accepter la connection entrante
if($client = socket_accept($socket) == false) $client=socket_accept($socket);
if($client === false)
{ {
echo "N'a pas pu accepter la connection entrante ERROR : ".socket_strerror(socket_last_error())."\n"; echo "N'a pas pu accepter la connection entrante ERROR : ".socket_strerror(socket_last_error())."\n";
return;
} }
// Ajouter la socket du client à la liste des sockets à surveiller else
{
$read[]=$client; $read[]=$client;
} }
// Ajouter la socket du client à la liste des sockets à surveiller
}
var_dump($client); var_dump($client);
echo "socket_strerror(socket_last_error()) : ".socket_strerror(socket_last_error())."\n";
//si $client est dans le tableau des sockets à surveiller en lecture //si $client est dans le tableau des sockets à surveiller en lecture
//Met la requête du client dans $request et verifie si la requête est valide //Met la requête du client dans $request et verifie si la requête est valide
//Si la requête est valide, éxécute la méthode du requestHandler correspondante //Si la requête est valide, éxécute la méthode du requestHandler correspondante
//Sinon, envoie un message d'erreur au client //Sinon, envoie un message d'erreur au client
if(in_array($client,$read)) if ($client != false) {
{ if (in_array($client, $read)) {
$request=socket_read($client,$BUFFER_SIZE); $request = socket_read($client, $BUFFER_SIZE);
if($request!=false) if ($request != false) {
{ $requestHandler = new RequestHandler();
$requestHandler = new RequestHandler($request); if (method_exists($requestHandler, $request)) {
if(method_exists($requestHandler,$request)) $function=explode(' ',$request)[0];
{ echo ($function."\n");
$response=$requestHandler->explode(' ',$request)[0]($client,$request); $response = $requestHandler->$function($client, $request);
} echo 'response : '.$response."\n";
else } else {
{ $response = "Invalid request";
$response="Invalid request";
// socket_write($client,$response,strlen($response)); // socket_write($client,$response,strlen($response));
} }
} } else {
else $response = "Response is false";
{
$response="Response is false";
// socket_write($client,$response,strlen($response)); // socket_write($client,$response,strlen($response));
} }
} }
}
} }
Loading…
Cancel
Save