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>
|
||||
<body>
|
||||
Queuing
|
||||
</body>
|
||||
</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