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

103 lines
3.1 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);
// 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 et au 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
}
socket_set_block($socket) or die("N'a pas pu mettre la socket en mode bloquant ERROR : ".socket_strerror(socket_last_error())."\n");
// 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, 10) or die ("N'a pas pu configurer l'écoute sur la socket ERROR : ".socket_strerror(socket_last_error())."\n");
//Si c'est une connection entrante, on la rajoute à la liste des sockets à surveiller
if(in_array($socket,$read))
{
// Accepter la connection entrante
if($client = socket_accept($socket) == false)
{
echo "N'a pas pu accepter la connection entrante ERROR : ".socket_strerror(socket_last_error())."\n";
return;
}
// Ajouter la socket du client à la liste des sockets à surveiller
$read[]=$client;
}
var_dump($client);
//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(in_array($client,$read))
{
$request=socket_read($client,$BUFFER_SIZE);
if($request!=false)
{
$requestHandler = new RequestHandler($request);
if(method_exists($requestHandler,$request))
{
$response=$requestHandler->explode(' ',$request)[0]($client,$request);
}
else
{
$response="Invalid request";
// socket_write($client,$response,strlen($response));
}
}
else
{
$response="Response is false";
// socket_write($client,$response,strlen($response));
}
}
}