Merge branch 'master' of https://codefirst.iut.uca.fr/git/nathan.boileau/Scripted
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
commit
c3e1ba333b
@ -0,0 +1,79 @@
|
|||||||
|
<?php
|
||||||
|
class requestHandler{
|
||||||
|
private PartieGateway $partie_gateway;
|
||||||
|
private array $arraySocketGroup;
|
||||||
|
private array $socketsFromQueue;
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->partie_gateway=new PartieGateway();
|
||||||
|
$this->arraySocketGroup=array();
|
||||||
|
$this->socketsFromQueue=array();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function Queuing(Socket $socket,string $request){
|
||||||
|
global $playerNumberPerGame;
|
||||||
|
|
||||||
|
// Ajoute la connection à un tableau de connection des joueurs en attente
|
||||||
|
|
||||||
|
$socketsFromQueue[]=$socket;
|
||||||
|
|
||||||
|
// 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 de la file d'attente
|
||||||
|
|
||||||
|
if(count($socketsFromQueue)==$playerNumberPerGame)
|
||||||
|
{
|
||||||
|
$response="launchGame";
|
||||||
|
$idPartie=$this->partie_gateway->findPartieInQueue();
|
||||||
|
$arraySocketGroup[$idPartie]= $socketsFromQueue;
|
||||||
|
$arraySocketGroup[$this->partie_gateway->findPartieInQueue()]=$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");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public function quitQueue(Socket $client,String $request){
|
||||||
|
// supprime le socket de la liste des sockets en attente
|
||||||
|
$socketsFromQueue=array_diff($this->socketsFromQueue, array($client));
|
||||||
|
$response="quitQueue";
|
||||||
|
// 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");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public function quitGame(Socket $client,String $request){
|
||||||
|
// supprime la socket de la liste des sockets en attente
|
||||||
|
$this->arraySocketGroup=array_diff($this->arraySocketGroup, array($client));
|
||||||
|
$response="quitGame";
|
||||||
|
// envoie à tous les utilisateurs en attente de rafraichir la page
|
||||||
|
foreach($this->arraySocketGroup[explode(" ",$request)[1]] as $socket)
|
||||||
|
{
|
||||||
|
socket_write($socket, $response, strlen($response)) or die("N'a pas pu envoyer la réponse au client\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public function refreshDashBoard(Socket $client,String $request){
|
||||||
|
$response="refreshDashBoard";
|
||||||
|
// envoie à tous les utilisateurs en attente de rafraichir la page
|
||||||
|
foreach($this->arraySocketGroup[explode(" ",$request)[1]] as $socket)
|
||||||
|
{
|
||||||
|
socket_write($socket, $response, strlen($response)) or die("N'a pas pu envoyer la réponse au client\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public function finishGame(Socket $client,String $request){
|
||||||
|
// supprime la socket de la liste des sockets en attente
|
||||||
|
$this->arraySocketGroup=array_diff($this->arraySocketGroup, array($client));
|
||||||
|
$response="finishGame";
|
||||||
|
// envoie à tous les utilisateurs en attente de rafraichir la page
|
||||||
|
foreach($this->arraySocketGroup[explode(" ",$request)[1]] as $socket)
|
||||||
|
{
|
||||||
|
socket_write($socket, $response, strlen($response)) or die("N'a pas pu envoyer la réponse au client\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 8.7 KiB |
After Width: | Height: | Size: 771 B |
After Width: | Height: | Size: 1.0 KiB |
File diff suppressed because one or more lines are too long
@ -1,4 +1,5 @@
|
|||||||
<html>
|
<html>
|
||||||
<body>
|
<body>
|
||||||
|
Queuing
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
@ -1,19 +0,0 @@
|
|||||||
module = '/usr/local/lib/node_modules/';
|
|
||||||
console.log('module');
|
|
||||||
const express = require(module + "express");
|
|
||||||
console.log('express');
|
|
||||||
const socketIO = require(module +"socket.io");//('http://82.165.180.114:3000');
|
|
||||||
console.log('socketIO');
|
|
||||||
const app = express();
|
|
||||||
console.log('app');
|
|
||||||
const server = app.listen(3000);
|
|
||||||
const io =socketIO(server);
|
|
||||||
io.on('connection', socket => {
|
|
||||||
console.log("connection de l'utilisateur à l'id ". socket.id);
|
|
||||||
})
|
|
||||||
console.log('ioOnConnection');
|
|
||||||
|
|
||||||
io.on('launchGame' , function () {
|
|
||||||
console.log('launch the game');
|
|
||||||
location.reload();
|
|
||||||
})
|
|
@ -0,0 +1,90 @@
|
|||||||
|
<?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");
|
||||||
|
|
||||||
|
// 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");
|
||||||
|
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue