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

ServeurDeTest
Johan LACHENAL 2 years ago
commit 81ba1ddba8

@ -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/','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))

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

@ -16,17 +16,42 @@ body {
background-color: #111219; background-color: #111219;
} }
li { li {
display: inline; display: inline;
width: 225px; width: 225px;
} }
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: Equinox;
}
h6{
color: #898989;
font-weight: bolder;
}
.current { .current {
background: rgb(146, 254, 157); background: rgb(146, 254, 157);
background: -moz-linear-gradient( 50deg, rgba(146, 254, 157, 1) 0%, rgba(0, 201, 255, 1) 100% ); background: -moz-linear-gradient(
background: -webkit-linear-gradient( 50deg, rgba(146, 254, 157, 1) 0%, rgba(0, 201, 255, 1) 100% ); 50deg,
background: linear-gradient( 50deg, rgba(146, 254, 157, 1) 0%, rgba(0, 201, 255, 1) 100% ); 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); box-shadow: 0px 0px 50px -5px rgba(0, 201, 255, 0.3);
border-radius: 4px; border-radius: 4px;
-webkit-border-radius: 4px; -webkit-border-radius: 4px;
@ -50,4 +75,48 @@ li {
color: white; 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: 90%;
overflow-y: scroll;
}
.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%
);
}

@ -34,18 +34,18 @@
element.parentElement.classList.add("current"); element.parentElement.classList.add("current");
element.classList.remove("nav-button"); element.classList.remove("nav-button");
element.classList.add("currentText"); element.classList.add("currentText");
} }
</script> </script>
<div class=" container ml-0"> <div class="d-flex ml-0">
<!-- Menu --> <!-- Menu -->
<div <div
class="col-3 d-flex align-items-start user-select-none" class="col-3 user-select-none"
style="border-right: 1px solid #323232; height: 100vh; margin:0" style="border-right: 1px solid #323232; height: 100vh; margin:0; width: 18%;"
> >
<nav class="navbar justify-content-center"> <nav class="navbar justify-content-center">
@ -55,7 +55,7 @@
class="row px-3 pt-4 pb-5 m-0 text-center" class="row px-3 pt-4 pb-5 m-0 text-center"
style="width: fit-content" style="width: fit-content"
> >
<h3 style="font-family: Equinox">Scripted</h3> <h2 style="font-family: Equinox">Scripted</h2>
</div> </div>
<!-- End Title --> <!-- End Title -->
@ -106,28 +106,56 @@
</ul> </ul>
</nav> </nav>
</div> </div>
<!-- End Menu --> <!-- End Menu -->
<!-- ANCHOR Main part --> <!-- ANCHOR Main part -->
<div class="container-fluid mx-5" style="height: 100vh;">
<!-- Gestion énigmes -->
<div class="row m-5 d-flex justify-content-around" style="height: 45%; background-color:white;">
<!-- Enigme Solo -->
<div class="col-4 m-4 dashboard-card">
<!-- Title + Extends -->
<div class="row my-4 d-flex justify-content-center">
<div class="col-2"></div>
<div class="col text-center">
<h4>Énigmes Solo</h4>
</div>
<div class="col-2">
<svg fill="currentColor" height="20px" width="20px" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512" xml:space="preserve"><g id="SVGRepo_bgCarrier" stroke-width="0"></g><g id="SVGRepo_iconCarrier"> <g> <g> <g> <path d="M511.894,19.228c-0.031-0.316-0.09-0.622-0.135-0.933c-0.054-0.377-0.098-0.755-0.172-1.13 c-0.071-0.358-0.169-0.705-0.258-1.056c-0.081-0.323-0.152-0.648-0.249-0.968c-0.104-0.345-0.234-0.678-0.355-1.015 c-0.115-0.319-0.22-0.641-0.35-0.956c-0.13-0.315-0.284-0.616-0.428-0.923c-0.153-0.324-0.297-0.651-0.467-0.969 c-0.158-0.294-0.337-0.574-0.508-0.86c-0.186-0.311-0.362-0.626-0.565-0.93c-0.211-0.316-0.447-0.613-0.674-0.917 c-0.19-0.253-0.366-0.513-0.568-0.76c-0.443-0.539-0.909-1.058-1.402-1.551c-0.004-0.004-0.007-0.008-0.011-0.012 c-0.004-0.004-0.008-0.006-0.011-0.01c-0.494-0.493-1.012-0.96-1.552-1.403c-0.247-0.203-0.507-0.379-0.761-0.569 c-0.303-0.227-0.6-0.462-0.916-0.673c-0.304-0.203-0.619-0.379-0.931-0.565c-0.286-0.171-0.565-0.35-0.859-0.508 c-0.318-0.17-0.644-0.314-0.969-0.467c-0.307-0.145-0.609-0.298-0.923-0.429c-0.315-0.13-0.637-0.236-0.957-0.35 c-0.337-0.121-0.669-0.25-1.013-0.354c-0.32-0.097-0.646-0.168-0.969-0.249c-0.351-0.089-0.698-0.187-1.055-0.258 c-0.375-0.074-0.753-0.119-1.13-0.173c-0.311-0.044-0.617-0.104-0.933-0.135C492.072,0.037,491.37,0,490.667,0H341.333 C329.551,0,320,9.551,320,21.333c0,11.782,9.551,21.333,21.333,21.333h97.83L283.582,198.248c-8.331,8.331-8.331,21.839,0,30.17 s21.839,8.331,30.17,0L469.333,72.837v97.83c0,11.782,9.551,21.333,21.333,21.333S512,182.449,512,170.667V21.335 C512,20.631,511.963,19.928,511.894,19.228z"></path> <path d="M198.248,283.582L42.667,439.163v-97.83c0-11.782-9.551-21.333-21.333-21.333C9.551,320,0,329.551,0,341.333v149.333 c0,0.703,0.037,1.405,0.106,2.105c0.031,0.315,0.09,0.621,0.135,0.933c0.054,0.377,0.098,0.756,0.173,1.13 c0.071,0.358,0.169,0.704,0.258,1.055c0.081,0.324,0.152,0.649,0.249,0.969c0.104,0.344,0.233,0.677,0.354,1.013 c0.115,0.32,0.22,0.642,0.35,0.957c0.13,0.315,0.284,0.616,0.429,0.923c0.153,0.324,0.297,0.651,0.467,0.969 c0.158,0.294,0.337,0.573,0.508,0.859c0.186,0.311,0.362,0.627,0.565,0.931c0.211,0.316,0.446,0.612,0.673,0.916 c0.19,0.254,0.366,0.514,0.569,0.761c0.443,0.54,0.91,1.059,1.403,1.552c0.004,0.004,0.006,0.008,0.01,0.011 c0.004,0.004,0.008,0.007,0.012,0.011c0.493,0.492,1.012,0.959,1.551,1.402c0.247,0.203,0.507,0.379,0.76,0.568 c0.304,0.227,0.601,0.463,0.917,0.674c0.303,0.203,0.618,0.379,0.93,0.565c0.286,0.171,0.565,0.35,0.86,0.508 c0.318,0.17,0.645,0.314,0.969,0.467c0.307,0.145,0.609,0.298,0.923,0.428c0.315,0.13,0.636,0.235,0.956,0.35 c0.337,0.121,0.67,0.25,1.015,0.355c0.32,0.097,0.645,0.168,0.968,0.249c0.351,0.089,0.698,0.187,1.056,0.258 c0.375,0.074,0.753,0.118,1.13,0.172c0.311,0.044,0.618,0.104,0.933,0.135c0.7,0.069,1.402,0.106,2.104,0.106 c0,0,0.001,0,0.001,0h149.333c11.782,0,21.333-9.551,21.333-21.333s-9.551-21.333-21.333-21.333h-97.83l155.582-155.582 c8.331-8.331,8.331-21.839,0-30.17S206.58,275.251,198.248,283.582z"></path> </g> </g> </g> </g></svg>
</div>
</div>
<!-- End Title + Extends-->
<!-- <div class="col" style="width: 500px; height:500px; background-color:white"> <!-- Start Content -->
<div class="row"> <div class="row">
<div class="col-6" style="width: 500px; height:500px; background-color:white"> <div class="col-4 px-4">
<h6 class="text-left">Ordre</h6>
</div>
<div class="col px-4">
<h6 class="">Nom Énigme</h6>
</div>
</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem aspernatur molestiae iusto repudiandae delectus saepe tenetur cumque fugit odio cupiditate ducimus, numquam rem labore, excepturi magni minima. Tenetur, ut voluptas.
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Earum atque ipsam placeat numquam sint fugit aspernatur fugiat laborum. Architecto quibusdam odit expedita dolores dolore eum provident ab tempore animi cumque?
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Impedit, magnam? Voluptatem delectus nulla et at iste voluptatibus officiis quasi. Eaque excepturi, pariatur dolor debitis repellat nostrum odio laudantium nam accusantium.
</div> </div>
<div class="col-6"> <div class="col-4 m-4 dashboard-card dashboard-card-reversed">
</div> </div>
</div> </div>
<div class="row"> <div class="row m-5 p-5" style="height:390px; background-color:white;">
<div class="row p-0">
</div> </div>
</div> --> </div>
</div>
</div>
</div> </div>
</body> </body>
</html> </html>

@ -1,7 +1,6 @@
<?php <?php
require_once('./Config/Config.php'); require_once('./Config/Config.php');
require_once('./Config/Autoload.php'); require_once('./Config/Autoload.php');
$partie_gateway= new PartieGateway();
Autoload::charger(); Autoload::charger();
// pas d'arrêt d'éxécution du script (No timeout) // pas d'arrêt d'éxécution du script (No timeout)
@ -50,38 +49,34 @@ while(true) {
// Commencer à écouter sur le port // Commencer à écouter sur le port
$result = socket_listen($socket) or die ("N'a pas pu configurer l'écoute sur la socket\n"); $result = socket_listen($socket) or die ("N'a pas pu configurer l'écoute sur la socket\n");
// tant qu'il n'y a pas de connection entrante ou de requete du client bloqué le while // tant qu'il n'y a pas de connection entrante ou de requete du client bloque le while
socket_select($read,$write,$except,null);
// Accepter les connections entrantes s'il y en a à cet instant t ou bloque le while tant qu'il n'y en a pas
$client = socket_accept($socket) or die("N'a pas pu accepter les connections entrantes\n");
// Ajoute la connection à un tableau de connection des joueurs en attente socket_select($read,$write,$except,null);
$socketsFromQueue[]=$client; // si il y a une connection entrante, l'accepter, cette méthode est non bloquante
// puisqu'ici $read a été modifié par socket_select et donc la méthode sera forcément
// exécutée sans bloquer le while
// si le nombre de joueur par partie nécessaire est égal au nombre de connection encore dans la file d'attente if(in_array($socket,$read))
// 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 $client = socket_accept($socket) or die("N'a pas pu accepter les connections entrantes\n");
}
if(strcmp($request,"Queuing")==0) if(in_array($client,$read))
{ {
if(count($socketsFromQueue)==$playerNumberPerGame) // Lire le message provenant de la socket du client
$request = socket_read($client,1024) or die("N'a pas pu lire de requête");
if(method_exists($requestHandler,$request))
{ {
$response="launchGame"; // éxécute la méthode correspondant à la requête du client en enlevant les derniers mots
$idPartie=$partie_gateway->findPartieInQueue(); // de la requête qui sont les paramètres de la méthode
$arraySocketGroup[$idPartie]= $socketsFromQueue; $requestHandler->explode('',$request)[0]($client,$request);
$socketsFromQueue=array();
} }
else{
$response="refreshQueue";
} }
foreach($socketsFromQueue as $sock)
if(in_array($client,$write))
{ {
socket_write($sock,$response,strlen($response)) or die("N'a pas pu écrire à la socket\n"); // Ecrire la réponse dans la socket du client
} socket_write($client,$response) or die("N'a pas pu écrire dans la socket du client");
} }
// Lire le message provenant de la socket du client
$input = socket_read($spawn,1024) or die("N'a pas pu lire de requête");
} }
Loading…
Cancel
Save