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.
78 lines
2.2 KiB
78 lines
2.2 KiB
<?php
|
|
require_once('./Config/Config.php');
|
|
require_once('./Config/Autoload.php');
|
|
Autoload::charger();
|
|
|
|
global $serverAdress,$port,$playerNumberPerGame;
|
|
|
|
// 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,$serverAdress,$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();
|
|
|
|
// tableau des sockets à surveiller en lecture
|
|
|
|
$read=array($socket);
|
|
|
|
// tableau des sockets à surveiller en écriture
|
|
|
|
$write=array();
|
|
|
|
//tableau des sockets à surveiller parce qu'elles ont des erreurs
|
|
|
|
$except=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");
|
|
|
|
// tant qu'il n'y a pas de connection entrante ou de requete du client bloque le while
|
|
|
|
socket_select($read,$write,$except,null);
|
|
|
|
// si il y a une connection entrante, l'accepter, cette méthode est non bloquante
|
|
// puisqu'ici $read a été modifié par socket_select et donc la méthode sera forcément
|
|
// exécutée sans bloquer le while
|
|
|
|
if(in_array($socket,$read))
|
|
{
|
|
$client = socket_accept($socket) or die("N'a pas pu accepter les connections entrantes\n");
|
|
}
|
|
|
|
if(in_array($client,$read))
|
|
{
|
|
// Lire le message provenant de la socket du client
|
|
$request = socket_read($client,1024) or die("N'a pas pu lire de requête");
|
|
if(method_exists($requestHandler,$request))
|
|
{
|
|
// éxécute la méthode correspondant à la requête du client en enlevant les derniers mots
|
|
// de la requête qui sont les paramètres de la méthode
|
|
$requestHandler->explode('',$request)[0]($client,$request);
|
|
}
|
|
}
|
|
} |