ajout de code pour le serveur.php

pas encore prêt
ServeurDeTest
Johan LACHENAL 2 years ago
parent d2ea6139ec
commit da3193e2a7

@ -37,6 +37,7 @@ $vues['enigmePage'] = 'View/src/pages/Enigme/EnigmePage.php';
$server = './server.js'; $server = './server.js';
$serverAdress = "http://82.165.180.114"; $serverAdress = "http://82.165.180.114";
$port= "3000"; $port= "3000";
$playerNumberPerGame=2;
//modules //modules
$modules = 'node_module/'; $modules = 'node_module/';

@ -52,23 +52,6 @@ class UserModel
} }
echo '8'; echo '8';
$this->utilisateur_gateway->addToQueue($_SESSION['utilisateur'], $partie); $this->utilisateur_gateway->addToQueue($_SESSION['utilisateur'], $partie);
$this->Queue();
}
public function Queue(){
global $port,$serverAdress;
// pas d'arrêt d'éxécution du script (No timeout)
set_time_limit(0);
// Créer une socket
$socket = socket_create(AF_INET, SOCK_STREAM,0) or die("la socket n'a pas pu être crée\n");
// connecter la socket à l'adresse ip et au port du serveur
$result = socket_connect($socket,$serverAdress,$port) or die("la socket n'a pas pu être attachée au serveur à l'adresse ");
$request="Queuing";
$response="";
while(strcmp($response,"")>=0){
$response=socket_read($socket,1024);
sleep(1);
}
} }
public function findUserGroup() : int { public function findUserGroup() : int {
@ -89,6 +72,11 @@ class UserModel
header('Location: index.php'); header('Location: index.php');
} }
public function findUsersInQueue() : array
{
return $this->utilisateur_gateway->findUsersInQueue();
}
public function getEnigmeByOrdre(int $num) : Enigme public function getEnigmeByOrdre(int $num) : Enigme
{ {
$tabEnigme = $this->enigme_gateway->findByOrdre($num); $tabEnigme = $this->enigme_gateway->findByOrdre($num);

@ -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 <?php
require_once('./Config/Config.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) // pas d'arrêt d'éxécution du script (No timeout)
set_time_limit(0); 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"); $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 // 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 "); $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) { while(true) {
// Commencer à écouter sur le port // 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");
// Ajoute la connection à un tableau de connection des joueurs en attente
$socketsFromQueue[]=$spawn;
// Accepter les connections entrantes s'il y en a à cet instant t // si le nombre de joueur par partie nécessaire est égal au nombre de connection encore dans la file d'attente
$spawn = socket_accept($socket) or die("N'a pas pu accepter les connections entrantes"); // 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 //Lire le message provenant de la socket du client
$input = socket_read($spawn,1024) or die("N'a pas pu lire de requête"); $input = socket_read($spawn,1024) or die("N'a pas pu lire de requête");
} }

Loading…
Cancel
Save