parent
d2ea6139ec
commit
da3193e2a7
@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
class clientServer{
|
||||
private static $instance;
|
||||
private Socket $socket;
|
||||
private function __construct() {
|
||||
// Créer une socket
|
||||
$socket = socket_create(AF_INET, SOCK_STREAM,0) or die("la socket n'a pas pu être crée\n");
|
||||
|
||||
}
|
||||
private function __clone() {}
|
||||
public static function getInstance() {
|
||||
if (self::$instance === null) {
|
||||
self::$instance = new self();
|
||||
}
|
||||
return self::$instance;
|
||||
}
|
||||
// ... autres méthodes de la classe ...
|
||||
|
||||
public function Queue(){
|
||||
global $port,$serverAdress,$rep,$vues;
|
||||
$userModel = new UserModel();
|
||||
// pas d'arrêt d'éxécution du script (No timeout)
|
||||
set_time_limit(0);
|
||||
// connecter la socket à l'adresse ip et au port du serveur
|
||||
$result = socket_connect($this->socket,$serverAdress,$port) or die("la socket n'a pas pu être attachée au serveur à l'adresse ");
|
||||
$request="Queuing";
|
||||
$response="";
|
||||
while(strcmp($response,"launchGame")!=0){
|
||||
$response=socket_read($this->socket,1024);
|
||||
if($response!==false)
|
||||
{
|
||||
if(strcmp($response,"refreshQueue")==0)
|
||||
{
|
||||
$userGroup = $userModel->findUsersInQueue();
|
||||
$numberOfPlayer=count($userGroup);
|
||||
header('Location : '.$rep.$vues['Queue']);
|
||||
}
|
||||
}
|
||||
sleep(1);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -1,22 +1,73 @@
|
||||
<?php
|
||||
require_once('./Config/Config.php');
|
||||
require_once('./Config/Autoload.php');
|
||||
$partie_gateway= new PartieGateway();
|
||||
Autoload::charger();
|
||||
|
||||
// pas d'arrêt d'éxécution du script (No timeout)
|
||||
|
||||
set_time_limit(0);
|
||||
|
||||
// Créer une socket
|
||||
// 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\n");
|
||||
|
||||
// Attacher la socket à unde adresse ip et un port
|
||||
|
||||
$result = socket_bind($socket,$host,$port) or die("la socket n'a pas pu être attachée au serveur à l'adresse ");
|
||||
|
||||
// tableau de groupe de sockets avec comme paire clés valeurs
|
||||
// l'identifiant de la partie et l'ensemble de connections
|
||||
|
||||
$arraySocketGroup=array();
|
||||
|
||||
// tableau des connections en attente de pouvoir créer une partie
|
||||
|
||||
$socketsFromQueue=array();
|
||||
|
||||
// reponse du serveur au client
|
||||
|
||||
$response='';
|
||||
|
||||
// requête du client au serveur
|
||||
|
||||
$request='';
|
||||
while(true) {
|
||||
|
||||
// Commencer à écouter sur le port
|
||||
$result = socket_listen($socket) or die ("N'a pas pu configurer l'écoute sur la socket");
|
||||
$result = socket_listen($socket) or die ("N'a pas pu configurer l'écoute sur la socket\n");
|
||||
|
||||
// Accepter les connections entrantes s'il y en a à cet instant t ou bloque le while tant qu'il n'y en a pas
|
||||
$client = socket_accept($socket) or die("N'a pas pu accepter les connections entrantes\n");
|
||||
|
||||
// Accepter les connections entrantes s'il y en a à cet instant t
|
||||
$spawn = socket_accept($socket) or die("N'a pas pu accepter les connections entrantes");
|
||||
// Ajoute la connection à un tableau de connection des joueurs en attente
|
||||
$socketsFromQueue[]=$spawn;
|
||||
|
||||
// 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
|
||||
|
||||
if(strcmp($request,"Queuing")==0)
|
||||
{
|
||||
if(count($socketsFromQueue)==$playerNumberPerGame)
|
||||
{
|
||||
$response="launchGame";
|
||||
foreach($socketsFromQueue as $sock)
|
||||
{
|
||||
socket_write($sock,$response,strlen($response)) or die("N'a pas pu écrire à la socket\n");
|
||||
}
|
||||
$idPartie=$partie_gateway->findPartieInQueue();
|
||||
$arraySocketGroup[$idPartie]= $socketsFromQueue;
|
||||
$socketsFromQueue=array();
|
||||
}
|
||||
else{
|
||||
$response="refreshQueue";
|
||||
foreach($socketsFromQueue as $sock)
|
||||
{
|
||||
socket_write($sock,$response,strlen($response)) or die("N'a pas pu écrire à la socket\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
//Lire le message provenant de la socket du client
|
||||
$input = socket_read($spawn,1024) or die("N'a pas pu lire de requête");
|
||||
}
|
||||
|
Loading…
Reference in new issue