You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Scripted/WEB/server.php

116 lines
3.8 KiB

<?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 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\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");
//3 tableau de sockets, le premier contient les sockets à lire, le deuxième contient les sockets à écrire et le troisième contient les sockets avec des erreurs
$read = array($client);
$write = NULL;
$except = NULL;
// Ajoute la connection à un tableau de connection des joueurs en attente
$socketsFromQueue[]=$client;
// 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";
$arraySocketGroup[$partie_gateway->findPartieInQueue()]=$socketsFromQueue;
$socketsFromQueue=array();
}
else
{
$response="refreshQueue";
}
foreach($socketsFromQueue as $socket)
{
socket_write($socket,$response,strlen($response)) or die("N'a pas pu écrire sur la socket");
}
}
//Lire le message provenant de la socket du client
$input = socket_read($client,1024) or die("N'a pas pu lire de requête");
}
// si il y a des sockets à lire
if(strcmp($request,"quitQueue")==0)
{
// supprime le socket de la liste des sockets en attente
$socketsFromQueue=array_diff($socketsFromQueue, array($client));
$response="refresh";
// 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");
}
}
else if(strcmp($request,"quitGame")==0)
{
// supprime le socket de la liste des sockets en attente
$socketsFromQueue=array_diff($socketsFromQueue, array($client));
$response="refresh";
// 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");
}
}
else if(strcmp($request,"connectQueue")==0)
{
// Ajoute la connection à un tableau de connection des joueurs en attente
$socketsFromQueue[]=$client;
$response="refresh";
// 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");
}
}