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.
123 lines
4.1 KiB
123 lines
4.1 KiB
<?php
|
|
require_once('./Config/Config.php');
|
|
require_once('./Config/Autoload.php');
|
|
require_once('./Model/RequestHandler.php');
|
|
Autoload::charger();
|
|
|
|
global $serverAdress,$port,$playerNumberPerGame;
|
|
|
|
// pas d'arrêt d'éxécution du script (No timeout)
|
|
|
|
set_time_limit(0);
|
|
|
|
// pas de tamponisation de sortie (No output buffering)
|
|
ob_implicit_flush();
|
|
|
|
// 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");
|
|
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
|
|
|
|
$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
|
|
}
|
|
|
|
$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
|
|
$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='';
|
|
|
|
$client=false;
|
|
|
|
while(true) {
|
|
|
|
// 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())." (Serveur) \n");
|
|
if ($result === false) {
|
|
// L'écoute sur le port a échoué
|
|
echo "socket_listen a échoué : " . socket_strerror(socket_last_error()) . " (Serveur)\n";
|
|
} else {
|
|
echo "socket listen sur le port :".$port." (Serveur)\n";
|
|
// L'écoute sur le port a réussi
|
|
}
|
|
|
|
//Si c'est une connection entrante, on la rajoute à la liste des sockets à surveiller
|
|
if(in_array($socket,$read))
|
|
{
|
|
// Accepter la connection entrante
|
|
$client=socket_accept($socket);
|
|
if($client === false)
|
|
{
|
|
echo "N'a pas pu accepter la connection entrante ERROR : ".socket_strerror(socket_last_error())." (Serveur)\n";
|
|
}
|
|
else
|
|
{
|
|
$read[]=$client;
|
|
}
|
|
// Ajouter la socket du client à la liste des sockets à surveiller
|
|
}
|
|
|
|
var_dump($client);
|
|
echo "socket_strerror(socket_last_error()) : ".socket_strerror(socket_last_error())." (Serveur)\n";
|
|
|
|
//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
|
|
//Si la requête est valide, éxécute la méthode du requestHandler correspondante
|
|
//Sinon, envoie un message d'erreur au client
|
|
if ($client != false) {
|
|
if (in_array($client, $read)) {
|
|
$request = socket_read($client, $BUFFER_SIZE);
|
|
if ($request != false) {
|
|
$requestHandler = new RequestHandler();
|
|
if (method_exists($requestHandler, $request)) {
|
|
$function=explode(' ',$request)[0];
|
|
echo ($function." (Serveur) \n");
|
|
$response = $requestHandler->$function($client, $request);
|
|
echo 'response : '.$response." (Serveur)\n";
|
|
// socket_write($client,$response,strlen($response));
|
|
} else {
|
|
$response = "Invalid request";
|
|
socket_write($client,$response,strlen($response));
|
|
}
|
|
} else {
|
|
$response = "Response is false";
|
|
socket_write($client,$response,strlen($response));
|
|
}
|
|
}
|
|
}
|
|
} |