Merge branch 'master' of https://codefirst.iut.uca.fr/git/nathan.boileau/Scripted
continuous-integration/drone/push Build is passing Details

ServeurDeTest
Noé GARNIER 2 years ago
commit c3e1ba333b

@ -0,0 +1,39 @@
<?php
class Client{
private static $instance;
private $socket;
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
public function Queuing(){
global $port,$serverAdress,$rep,$vues, $BUFFER_SIZE;
$userModel = new UserModel();
// pas d'arrêt d'éxécution du script (No timeout)
set_time_limit(0);
$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");
// connecter la socket à l'adresse ip et au port du serveur
$result = socket_connect($socket, $serverAdress, $port) or die("Impossible de se connecter au serveur ERROR : ".socket_strerror(socket_last_error())."\n");
$request="Queuing";
socket_write($socket,$request,strlen($request));
$response="";
while(strcmp($response,"launchGame")!=0){
$response=socket_read($socket, $BUFFER_SIZE);
if($response!=false)
{
if(strcmp($response,"refreshQueue")==0)
{
$userGroup = $userModel->findUsersInQueue();
$numberOfPlayer=count($userGroup);
header('Location : '.$rep.$vues['Queue']);
}
}
sleep(1);
}
socket_close($socket);
}
}

@ -34,7 +34,7 @@ class Autoload
{ {
global $rep; global $rep;
$filename = $class.'.php'; $filename = $class.'.php';
$dir =array('Model/','./','Config/','Controller/','Metier/', 'Factory/'); $dir =array('Model/','Handler/','./','Config/','Client','Controller/','Metier/', 'Factory/');
foreach ($dir as $d){ foreach ($dir as $d){
$file=$rep.$d.$filename; $file=$rep.$d.$filename;
if (file_exists($file)) if (file_exists($file))

@ -34,9 +34,12 @@ $vues['queue'] = 'View/src/pages/Multijoueur/Queue.php';
// Enigme // Enigme
$vues['enigmePage'] = 'View/src/pages/Enigme/EnigmePage.php'; $vues['enigmePage'] = 'View/src/pages/Enigme/EnigmePage.php';
// Server // Server
$server = './server.js'; $BUFFER_SIZE = 1024;
$serverAdress = "http://82.165.180.114"; $serverAdress = "82.165.180.114";
$port= "3000"; $port= "3000";
$playerNumberPerGame=2;
//modules
$modules = 'node_module/';
//Error //Error
$vues['erreur'] = 'View/src/pages/Erreur.php'; $vues['erreur'] = 'View/src/pages/Erreur.php';

@ -4,7 +4,7 @@ class FrontController
function __construct() function __construct()
{ {
try { try {
global $error, $view, $rep; global $error, $vues, $rep;
$nettoyage = new Nettoyage(); $nettoyage = new Nettoyage();
session_start(); session_start();
// Check role permissions // Check role permissions
@ -23,7 +23,7 @@ class FrontController
new UserController(); new UserController();
} else if (method_exists('UserController', $action) == false) { } else if (method_exists('UserController', $action) == false) {
$error = "Action non valide " . $action; $error = "Action non valide " . $action;
require($rep . $view['erreur']); require($rep . $vues['erreur']);
} else { } else {
//echo "action user valide"; //echo "action user valide";
$_REQUEST['action'] = $action; $_REQUEST['action'] = $action;
@ -36,7 +36,7 @@ class FrontController
new AdminController(); new AdminController();
} else if (method_exists('AdminController', $action) == false) { } else if (method_exists('AdminController', $action) == false) {
$error = "Action non valide" . $action; $error = "Action non valide" . $action;
require($rep . $view['erreur']); require($rep . $vues['erreur']);
} else { } else {
//echo "action admin valide"; //echo "action admin valide";
$_REQUEST['action'] = $action; $_REQUEST['action'] = $action;
@ -49,7 +49,7 @@ class FrontController
} }
} catch (Exception $e) { } catch (Exception $e) {
$error = $e->getMessage(); $error = $e->getMessage();
require($rep . $view['erreur']); require($rep . $vues['erreur']);
} }
} }
} }

@ -1,4 +1,5 @@
<?php <?php
require_once('./Client/Client.php');
class UserController class UserController
{ {
function __construct() function __construct()
@ -170,12 +171,9 @@ class UserController
require($rep . $vues['queue']); require($rep . $vues['queue']);
$model = new UserModel(); $model = new UserModel();
$model->addToQueue(); $model->addToQueue();
$userGroup = $model->findUserGroup();/*.$serverAdress.$port*/ $client = Client::getInstance();
echo ' $client->Queuing();
<script src="/usr/local/lib/node_modules/socket.io/client-dist/socket.io.js"> header('Location: index.php?action=launchGame');
var socket = io();
io.to($userGroup).emit("launchGame");
</script>';
} catch (Exception $e) { } catch (Exception $e) {
$error = $e->getMessage(); $error = $e->getMessage();
require($rep . $vues['erreur']); require($rep . $vues['erreur']);

@ -54,11 +54,6 @@ class UserModel
} }
echo '8'; echo '8';
$this->utilisateur_gateway->addToQueue($_SESSION['utilisateur'], $partie); $this->utilisateur_gateway->addToQueue($_SESSION['utilisateur'], $partie);
$userGroup = (string)$partie->getIdPartie();
echo '<script>
socket.join($userGroup);
io.to($userGroup).emit("launchGame");
</script>';
} }
public function findUserGroup() : int { public function findUserGroup() : int {
@ -79,6 +74,11 @@ class UserModel
header('Location: index.php'); header('Location: index.php');
} }
public function findUsersInQueue() : array
{
return $this->utilisateur_gateway->findUsersInQueue();
}
public function getEnigmeByOrdre(int $num) : Enigme public function getEnigmeByOrdre(int $num) : Enigme
{ {
$tabEnigme = $this->enigme_gateway->findByOrdre($num); $tabEnigme = $this->enigme_gateway->findByOrdre($num);

@ -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");
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

@ -0,0 +1,6 @@
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Transformed by: SVG Repo Mixer Tools -->
<svg width="64px" height="64px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="SVGRepo_bgCarrier" stroke-width="0"/>
<g id="SVGRepo_iconCarrier"> <path d="M3 10.8074C3 9.9094 3.40231 9.0586 4.09639 8.48876L9.46186 4.08378C10.9372 2.87254 13.0628 2.87255 14.5381 4.08378L19.9036 8.48876C20.5977 9.0586 21 9.9094 21 10.8074V18C21 19.6569 19.6569 21 18 21H6C4.34315 21 3 19.6569 3 18V10.8074Z" stroke="#000000" stroke-width="2"/> <path d="M15 21V16C15 14.8954 14.1046 14 13 14H11C9.89543 14 9 14.8954 9 16V21" stroke="#000000" stroke-width="2"/> </g>
</svg>

After

Width:  |  Height:  |  Size: 771 B

@ -0,0 +1,9 @@
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Transformed by: SVG Repo Mixer Tools -->
<svg width="64px" height="64px" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="#ffffff" stroke="#ffffff" stroke-width="0.00024000000000000003">
<g id="SVGRepo_bgCarrier" stroke-width="0"/>
<g id="SVGRepo_iconCarrier">
<path d="M20.5 2h-13C6.122 2 5 3.683 5 5.75V15H3.5C2.122 15 1 16.57 1 18.5S2.122 22 3.5 22h13c1.378 0 2.5-1.683 2.5-3.75V9h1.5C21.878 9 23 7.43 23 5.5S21.878 2 20.5 2zm-17 19C2.701 21 2 19.832 2 18.5S2.701 16 3.5 16h11.057A5.635 5.635 0 0 0 14 18.5a5.578 5.578 0 0 0 .563 2.5zM18 18.25c0 1.574-.792 2.75-1.5 2.75h-.77a4.246 4.246 0 0 1-.73-2.5 4.141 4.141 0 0 1 .86-2.674l.71-.826H6V5.75C6 4.176 6.792 3 7.5 3h11.14A5.995 5.995 0 0 0 18 5.75zM20.5 8H19V5.75A4.616 4.616 0 0 1 19.823 3h.677c.799 0 1.5 1.168 1.5 2.5S21.299 8 20.5 8zM8 6h8v1H8zm0 3h8v1H8zm0 3h8v1H8z"/>
<path fill="none" d="M0 0h24v24H0z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

@ -0,0 +1,128 @@
@font-face {
font-family: Fauna;
src: url("../../assets/fonts/Fauna.ttf");
}
@font-face {
font-family: Equinox;
src: url("../../assets/fonts/Equinox.otf");
}
/* End Fonts CSS */
body {
min-height: 100vh;
font-family: Verdana, Geneva, Tahoma, sans-serif;
color: white;
height: 100vh;
background-color: #111219;
}
li {
display: inline;
width: 225px;
}
a {
color: white;
}
a:hover {
color: white;
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: Equinox;
}
.legend {
color: #898989;
font-weight: bolder;
}
.current {
background: rgb(146, 254, 157);
background: -moz-linear-gradient(
50deg,
rgba(146, 254, 157, 1) 0%,
rgba(0, 201, 255, 1) 100%
);
background: -webkit-linear-gradient(
50deg,
rgba(146, 254, 157, 1) 0%,
rgba(0, 201, 255, 1) 100%
);
background: linear-gradient(
50deg,
rgba(146, 254, 157, 1) 0%,
rgba(0, 201, 255, 1) 100%
);
box-shadow: 0px 0px 50px -5px rgba(0, 201, 255, 0.3);
border-radius: 4px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
-o-border-radius: 4px;
}
.currentText {
color: black;
}
.currentText:hover {
color: black;
}
.nav-button {
color: #898989;
}
.nav-button:hover {
color: white;
}
.dashboard-card {
background: rgb(0, 0, 0);
background: -moz-linear-gradient(
315deg,
rgba(0, 0, 0, 0.4192051820728291) 0%,
rgba(0, 0, 0, 1) 30%
);
background: -webkit-linear-gradient(
315deg,
rgba(0, 0, 0, 0.4192051820728291) 0%,
rgba(0, 0, 0, 1) 30%
);
background: linear-gradient(
315deg,
rgba(0, 0, 0, 0.4192051820728291) 0%,
rgba(0, 0, 0, 1) 30%
);
border-radius: 15px;
-webkit-border-radius: 15px;
-moz-border-radius: 15px;
-ms-border-radius: 15px;
-o-border-radius: 15px;
height: 350px;
overflow-y: scroll; /* Switch */
}
.dashboard-card-reversed {
background: rgb(0, 0, 0);
background: -moz-linear-gradient(
45deg,
rgba(0, 0, 0, 0.4192051820728291) 0%,
rgba(0, 0, 0, 1) 30%
);
background: -webkit-linear-gradient(
45deg,
rgba(0, 0, 0, 0.4192051820728291) 0%,
rgba(0, 0, 0, 1) 30%
);
background: linear-gradient(
45deg,
rgba(0, 0, 0, 0.4192051820728291) 0%,
rgba(0, 0, 0, 1) 30%
);
}

@ -14,7 +14,6 @@ body {
min-height: 100vh; min-height: 100vh;
font-family: "Equinox", sans-serif; font-family: "Equinox", sans-serif;
color: white; color: white;
scroll-behavior: smooth;
height: 100vh; height: 100vh;
background-image: url("../../assets/img/ImgMain2.png"); background-image: url("../../assets/img/ImgMain2.png");
background-position: center center; background-position: center center;

File diff suppressed because one or more lines are too long

@ -148,25 +148,28 @@
<!-- Main page --> <!-- Main page -->
<div class="col d-flex align-items-center user-select-none"> <div class="col d-flex align-items-center user-select-none">
<div class="col-6 m-0 neonBg" id="mainPart" style="max-height: 80%; height: 70%"> <div class="col-6 m-0 neonBg" id="mainPart" style="max-height: 80%; height: auto">
<div class="row mx-0 pt-4 pb-5 text-center"> <div class="row mx-0 pt-4 pb-5 text-center">
<h1>Scripted</h1> <h1>Scripted</h1>
</div> </div>
<!-- Solo --> <!-- Solo -->
<div class="row m-0 pt-4 pb-5 d-flex justify-content-center text-center"> <div class="row m-0 pt-4 pb-5 d-flex justify-content-center text-center">
<a class="cssbuttons-io" <?php <a class="cssbuttons-io"
<?php
if (isset($_SESSION['role']) && $_SESSION['role'] == 'user' || isset($_SESSION['role']) && $_SESSION['role'] == 'admin') { if (isset($_SESSION['role']) && $_SESSION['role'] == 'user' || isset($_SESSION['role']) && $_SESSION['role'] == 'admin') {
echo 'href="index.php?action=goToPresentation"'; echo 'href="index.php?action=goToPresentation"';
} else { } else {
echo 'href="index.php?action=goToLogin"'; echo 'href="index.php?action=goToLogin"';
} }
?> id="btn-1"> ?> id="btn-1">
<span><svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <span>
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M0 0h24v24H0z" fill="none"></path> <path d="M0 0h24v24H0z" fill="none"></path>
<path d="M24 12l-5.657 5.657-1.414-1.414L21.172 12l-4.243-4.243 1.414-1.414L24 12zM2.828 12l4.243 4.243-1.414 1.414L0 12l5.657-5.657L7.07 7.757 2.828 12zm6.96 9H7.66l6.552-18h2.128L9.788 21z" fill="currentColor"></path> <path d="M24 12l-5.657 5.657-1.414-1.414L21.172 12l-4.243-4.243 1.414-1.414L24 12zM2.828 12l4.243 4.243-1.414 1.414L0 12l5.657-5.657L7.07 7.757 2.828 12zm6.96 9H7.66l6.552-18h2.128L9.788 21z" fill="currentColor"></path>
</svg> </svg>
CodeQuest</span> CodeQuest
</span>
</a> </a>
</div> </div>
@ -183,7 +186,7 @@
?> ?>
id="btn-2"> id="btn-2">
<span> <span>
<svg fill="#ffffff" height="200px" width="200px" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 468.493 468.493" xml:space="preserve"><g id="SVGRepo_bgCarrier" stroke-width="0"></g><g id="SVGRepo_iconCarrier"> <g> <svg fill="currentColor" height="200px" width="200px" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 468.493 468.493" xml:space="preserve"><g id="SVGRepo_bgCarrier" stroke-width="0"></g><g id="SVGRepo_iconCarrier"> <g>
<path d="M138.321,161.831h-17.437v-17.437c0-3.615-2.287-6.835-5.701-8.026c-5.319-1.855-10.904-2.796-16.6-2.796 c-5.696,0-11.281,0.941-16.6,2.796c-3.414,1.191-5.701,4.411-5.701,8.026v17.437H58.847c-3.615,0-6.834,2.287-8.025,5.7 c-1.856,5.318-2.797,10.904-2.797,16.601s0.941,11.283,2.797,16.601c1.191,3.413,4.411,5.699,8.025,5.699h17.437v17.437 c0,3.615,2.287,6.834,5.7,8.025c5.318,1.856,10.904,2.797,16.601,2.797c5.697,0,11.283-0.941,16.601-2.797 c3.413-1.191,5.7-4.41,5.7-8.025v-17.437h17.437c3.615,0,6.835-2.287,8.026-5.7c1.855-5.318,2.796-10.903,2.796-16.6 c0-5.696-0.941-11.281-2.796-16.6C145.156,164.118,141.937,161.831,138.321,161.831z M131.729,189.432h-19.344 c-4.694,0-8.5,3.806-8.5,8.5v19.344c-3.481,0.553-7.12,0.552-10.601,0v-19.344c0-4.694-3.806-8.5-8.5-8.5H65.44 c-0.276-1.741-0.415-3.511-0.415-5.3s0.139-3.56,0.415-5.301h19.344c4.694,0,8.5-3.806,8.5-8.5v-19.343 c3.482-0.553,7.12-0.553,10.601,0v19.343c0,4.694,3.806,8.5,8.5,8.5h19.343c0.276,1.741,0.415,3.511,0.415,5.301 C132.143,185.921,132.004,187.692,131.729,189.432z"></path> <path d="M138.321,161.831h-17.437v-17.437c0-3.615-2.287-6.835-5.701-8.026c-5.319-1.855-10.904-2.796-16.6-2.796 c-5.696,0-11.281,0.941-16.6,2.796c-3.414,1.191-5.701,4.411-5.701,8.026v17.437H58.847c-3.615,0-6.834,2.287-8.025,5.7 c-1.856,5.318-2.797,10.904-2.797,16.601s0.941,11.283,2.797,16.601c1.191,3.413,4.411,5.699,8.025,5.699h17.437v17.437 c0,3.615,2.287,6.834,5.7,8.025c5.318,1.856,10.904,2.797,16.601,2.797c5.697,0,11.283-0.941,16.601-2.797 c3.413-1.191,5.7-4.41,5.7-8.025v-17.437h17.437c3.615,0,6.835-2.287,8.026-5.7c1.855-5.318,2.796-10.903,2.796-16.6 c0-5.696-0.941-11.281-2.796-16.6C145.156,164.118,141.937,161.831,138.321,161.831z M131.729,189.432h-19.344 c-4.694,0-8.5,3.806-8.5,8.5v19.344c-3.481,0.553-7.12,0.552-10.601,0v-19.344c0-4.694-3.806-8.5-8.5-8.5H65.44 c-0.276-1.741-0.415-3.511-0.415-5.3s0.139-3.56,0.415-5.301h19.344c4.694,0,8.5-3.806,8.5-8.5v-19.343 c3.482-0.553,7.12-0.553,10.601,0v19.343c0,4.694,3.806,8.5,8.5,8.5h19.343c0.276,1.741,0.415,3.511,0.415,5.301 C132.143,185.921,132.004,187.692,131.729,189.432z"></path>
<path d="M254.329,166.478c0.009,0,0.019,0,0.028,0c7.996-0.009,14.459-6.501,14.44-14.497c-0.02-7.987-6.501-14.449-14.497-14.439 c-7.987,0.019-14.459,6.511-14.439,14.497C239.879,160.025,246.351,166.478,254.329,166.478z"></path> <path d="M254.329,166.478c0.009,0,0.019,0,0.028,0c7.996-0.009,14.459-6.501,14.44-14.497c-0.02-7.987-6.501-14.449-14.497-14.439 c-7.987,0.019-14.459,6.511-14.439,14.497C239.879,160.025,246.351,166.478,254.329,166.478z"></path>
<path d="M413.655,176.853c-15.05-16.238-39.613-18.106-57.137-4.34c-4.789,3.762-10.376,6.982-16.534,9.625 c-6.765-39.084-24.521-74.946-51.786-104.346c-15.049-16.24-39.611-18.11-57.141-4.344c-14.5,11.397-36.2,17.934-59.535,17.934 c-23.341,0-45.044-6.537-59.545-17.935C94.463,59.683,69.9,61.551,54.838,77.791C19.475,115.946,0,165.618,0,217.657 c0,19.499,2.732,38.81,8.122,57.398c3.94,13.584,14.402,24.161,27.984,28.293c4.044,1.23,8.175,1.833,12.271,1.833 c9.678,0,19.154-3.365,26.782-9.76c16.623-13.948,35.986-24.059,56.702-29.731c-4.216,16.521-6.402,33.645-6.402,51.037 c0,19.509,2.731,38.819,8.117,57.393c3.94,13.586,14.402,24.164,27.988,28.295c4.042,1.229,8.17,1.831,12.264,1.831 c9.679,0,19.157-3.367,26.782-9.764c26.931-22.595,61.155-35.038,96.366-35.038s69.435,12.443,96.365,35.038 c10.851,9.104,25.448,12.069,39.046,7.934c13.586-4.132,24.048-14.709,27.988-28.295c5.386-18.573,8.117-37.883,8.117-57.393 C468.493,264.68,449.018,215.006,413.655,176.853z M62.306,280.097c-5.739,4.811-13.167,6.312-20.378,4.117 c-7.197-2.189-12.518-7.559-14.598-14.729C22.466,252.708,20,235.27,20,217.657c0-46.981,17.582-91.825,49.505-126.269 c7.915-8.536,20.861-9.489,30.114-2.217c17.957,14.115,44.165,22.21,71.904,22.21c27.732,0,53.937-8.095,71.89-22.207 c9.265-7.274,22.208-6.321,30.118,2.214c25.198,27.172,41.391,60.45,47.16,96.697c-6.77,1.379-13.891,2.167-21.197,2.315 c0.952-1.937,1.498-4.11,1.49-6.416c-0.02-7.986-6.521-14.449-14.517-14.42c-7.986,0.019-14.439,6.52-14.419,14.516 c0.005,1.344,0.207,2.639,0.554,3.873c-13.69-2.876-25.901-8.161-35.168-15.44c-17.522-13.765-42.085-11.899-57.137,4.34 c-18.159,19.591-32.116,42.226-41.41,66.654C110.767,248.981,84.397,261.56,62.306,280.097z M441.167,368.549 c-2.08,7.173-7.4,12.542-14.599,14.731c-7.209,2.193-14.636,0.692-20.371-4.121c-30.527-25.611-69.316-39.716-109.221-39.716 s-78.693,14.105-109.22,39.716c-5.735,4.812-13.158,6.313-20.373,4.121c-7.197-2.189-12.519-7.558-14.598-14.731 c-4.861-16.763-7.326-34.199-7.326-51.823c0-46.989,17.582-91.835,49.506-126.277c4.349-4.692,10.22-7.09,16.164-7.09 c4.866,0,9.782,1.608,13.949,4.882c17.962,14.11,44.168,22.203,71.897,22.203s53.936-8.093,71.897-22.203 c9.258-7.273,22.203-6.326,30.113,2.208c31.924,34.443,49.506,79.289,49.506,126.277 C448.493,334.351,446.028,351.786,441.167,368.549z"></path> <path d="M413.655,176.853c-15.05-16.238-39.613-18.106-57.137-4.34c-4.789,3.762-10.376,6.982-16.534,9.625 c-6.765-39.084-24.521-74.946-51.786-104.346c-15.049-16.24-39.611-18.11-57.141-4.344c-14.5,11.397-36.2,17.934-59.535,17.934 c-23.341,0-45.044-6.537-59.545-17.935C94.463,59.683,69.9,61.551,54.838,77.791C19.475,115.946,0,165.618,0,217.657 c0,19.499,2.732,38.81,8.122,57.398c3.94,13.584,14.402,24.161,27.984,28.293c4.044,1.23,8.175,1.833,12.271,1.833 c9.678,0,19.154-3.365,26.782-9.76c16.623-13.948,35.986-24.059,56.702-29.731c-4.216,16.521-6.402,33.645-6.402,51.037 c0,19.509,2.731,38.819,8.117,57.393c3.94,13.586,14.402,24.164,27.988,28.295c4.042,1.229,8.17,1.831,12.264,1.831 c9.679,0,19.157-3.367,26.782-9.764c26.931-22.595,61.155-35.038,96.366-35.038s69.435,12.443,96.365,35.038 c10.851,9.104,25.448,12.069,39.046,7.934c13.586-4.132,24.048-14.709,27.988-28.295c5.386-18.573,8.117-37.883,8.117-57.393 C468.493,264.68,449.018,215.006,413.655,176.853z M62.306,280.097c-5.739,4.811-13.167,6.312-20.378,4.117 c-7.197-2.189-12.518-7.559-14.598-14.729C22.466,252.708,20,235.27,20,217.657c0-46.981,17.582-91.825,49.505-126.269 c7.915-8.536,20.861-9.489,30.114-2.217c17.957,14.115,44.165,22.21,71.904,22.21c27.732,0,53.937-8.095,71.89-22.207 c9.265-7.274,22.208-6.321,30.118,2.214c25.198,27.172,41.391,60.45,47.16,96.697c-6.77,1.379-13.891,2.167-21.197,2.315 c0.952-1.937,1.498-4.11,1.49-6.416c-0.02-7.986-6.521-14.449-14.517-14.42c-7.986,0.019-14.439,6.52-14.419,14.516 c0.005,1.344,0.207,2.639,0.554,3.873c-13.69-2.876-25.901-8.161-35.168-15.44c-17.522-13.765-42.085-11.899-57.137,4.34 c-18.159,19.591-32.116,42.226-41.41,66.654C110.767,248.981,84.397,261.56,62.306,280.097z M441.167,368.549 c-2.08,7.173-7.4,12.542-14.599,14.731c-7.209,2.193-14.636,0.692-20.371-4.121c-30.527-25.611-69.316-39.716-109.221-39.716 s-78.693,14.105-109.22,39.716c-5.735,4.812-13.158,6.313-20.373,4.121c-7.197-2.189-12.519-7.558-14.598-14.731 c-4.861-16.763-7.326-34.199-7.326-51.823c0-46.989,17.582-91.835,49.506-126.277c4.349-4.692,10.22-7.09,16.164-7.09 c4.866,0,9.782,1.608,13.949,4.882c17.962,14.11,44.168,22.203,71.897,22.203s53.936-8.093,71.897-22.203 c9.258-7.273,22.203-6.326,30.113,2.208c31.924,34.443,49.506,79.289,49.506,126.277 C448.493,334.351,446.028,351.786,441.167,368.549z"></path>

@ -1,4 +1,5 @@
<html> <html>
<body> <body>
Queuing
</body> </body>
</html> </html>

@ -2,7 +2,6 @@
require_once('./Config/Config.php'); require_once('./Config/Config.php');
require_once('./Config/Autoload.php'); require_once('./Config/Autoload.php');
Autoload::charger(); Autoload::charger();
$control = new FrontController(); $control = new FrontController();
//session_regenerate_id(true); //session_regenerate_id(true);

@ -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));
}
}
}

1411
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -1,14 +1,9 @@
{ {
"dependencies": { "dependencies": {
"animate.css": "^4.1.1", "bootstrap": "^5.2.2"
"animejs": "^3.2.1",
"bootstrap": "^5.2.2",
"bootstrap-icons": "^1.10.2",
"express": "^4.18.2",
"http": "^0.0.1-security",
"socket.io": "^4.5.4"
}, },
"type" : "module",
"nodemonConfig": { "nodemonConfig": {
"watch": [ "watch": [
"server.js" "server.js"

Loading…
Cancel
Save