Ajout de la création d'une partie et de la mise en place de

file d'attente
ServeurDeTest
johan 2 years ago
parent 5e5aff1d2e
commit 27deb0c4a8

@ -68,6 +68,16 @@ class EnigmeGateway
return $tabEnigme; return $tabEnigme;
} }
public function findEnigmaFromPartie(string $idPartie){
$query = "SELECT * FROM Enigme e, Contenir c
WHERE c.partie=:idPartie";
$this->con->executeQuery($query, array(
'idPartie' => array($idPartie, SQLITE3_TEXT)
));
$tabEnigme=EnigmeFactory::create($this->con->getResults());
return $tabEnigme;
}
/*
public function findById(string $idEnigme) : array public function findById(string $idEnigme) : array
{ {
$query="SELECT * FROM Enigme WHERE idEnigme =:idEnigme"; $query="SELECT * FROM Enigme WHERE idEnigme =:idEnigme";
@ -86,7 +96,7 @@ class EnigmeGateway
$results = $this->con->getResults(); $results = $this->con->getResults();
$tabEnigme=EnigmeFactory::create($results); $tabEnigme=EnigmeFactory::create($results);
return $tabEnigme; return $tabEnigme;
} }*/
public function showAll(): void public function showAll(): void
{ {

@ -21,17 +21,27 @@ class PartieGateway
/** /**
* @param array $listeJoueur * @param array $listeJoueur
*/ */
public function partieInQueueExists() : bool{
public function creerPartieMulti(array $listeJoueur){ $query = "SELECT count(*) FROM PARTICIPER WHERE etat = 0";
$query = "SELECT * FROM Enigme
WHERE points IS NOT NULL OR points != 0";
$this->con->executeQuery($query); $this->con->executeQuery($query);
$results = $this->con->getResults(); $results = $this->con->getResults();
$query= "SELECT max(p.id) if ($results[0]['count'] == 0)
FROM PARTIE p;"; return false;
else
return true;
}
public function findPartieMaxId() : int{
$query = "SELECT max(id) FROM Partie";
$this->con->executeQuery($query); $this->con->executeQuery($query);
$max=$this->con->getResults()[0]["max"]; $results=$this->con->getResults();
$partie=PartieFactory::createPartieMulti($max,$results); if (empty($results))
return 0;
else
return $results[0]['max'];
}
public function creerPartieMulti(int $max, array $tabEnigme) : Partie{
$partie=PartieFactory::createPartieMulti($max+1,$tabEnigme);
$query= "INSERT INTO Partie VALUES (:idPartie,:idEnigme)"; $query= "INSERT INTO Partie VALUES (:idPartie,:idEnigme)";
$this->con->executeQuery($query, array(':idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER))); $this->con->executeQuery($query, array(':idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER)));
foreach($partie->getListeEnigme() as $Enigme){ foreach($partie->getListeEnigme() as $Enigme){
@ -40,12 +50,17 @@ class PartieGateway
':idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER), ':idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER),
':idEnigme' => array($Enigme->getIdEnigme(), SQLITE3_INTEGER))); ':idEnigme' => array($Enigme->getIdEnigme(), SQLITE3_INTEGER)));
} }
foreach($listeJoueur as $Joueur){ return $partie;
$query= "INSERT INTO Participer VALUES (:idPartie, :idJoueur, TRUE)"; }
$this->con->executeQuery($query, array(
':idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER), public function findPartieInQueue(){
':idEnigme' => array($Enigme->getIdEnigme(), SQLITE3_INTEGER))); $query = "SELECT id
} FROM Partie p, Participer pa
WHERE pa.etat=0
AND pa.partie=p.id";
$this->con->executeQuery($query);
$results = $this->con->getResults();
return $results[0]['id'];
} }
public function creerPartieSolo(Utilisateur $utilisateur){ public function creerPartieSolo(Utilisateur $utilisateur){

@ -78,6 +78,23 @@ class UtilisateurGateway
return $estAdmin; return $estAdmin;
} }
public function addToQueue(Utilisateur $utilisateur,Partie $partie){
$query = "INSERT INTO Participer VALUES (:idUtilisateur,:idPartie)";
$this->con->executeQuery($query,array(
'idUtilisateur' => array($utilisateur->getEmail(),SQLITE3_TEXT),
'idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER)
));
}
public function queueFilled(){
$query = "SELECT count(*) FROM Participer WHERE etat=0";
$this->con->executeQuery($query);
if ($this->con->getResults()[0]['count'] >= 4)
return True;
else
return False;
}
/*public function resoudreEnigmeMulti(string $emailUtilisateur) /*public function resoudreEnigmeMulti(string $emailUtilisateur)
{ {
$query="SELECT c.partie FROM Contenir $query="SELECT c.partie FROM Contenir

@ -1,19 +1,19 @@
<?php <?php
class PartieFactory{ class PartieFactory{
public static function createPartieMulti($idMax,$resultsEnigme) : Partie public static function createPartieMulti($newId,$tabEnigme) : Partie
{ {
$tempsResolutionPartie=0; $tempsResolutionPartie=0;
$tabEnigme=array(); $tabIndex=range(0,count($tabEnigme));
$tabIndex=range(0,strlen($resultsEnigme)-1);
$randomNumber=0; $randomNumber=0;
$tabEnigmePartie = array();
while($tempsResolutionPartie <= 30) while($tempsResolutionPartie <= 30)
{ {
$randomNumber=$tabIndex[array_rand($tabIndex)]; $randomNumber=$tabIndex[array_rand($tabIndex)];
$tabEnigme[]=EnigmeFactory::create($resultsEnigme[$randomNumber]); $tabEnigmePartie[]=$tabEnigme[$randomNumber];
$TempsResolutionPartie+=$resultsEnigme[$randomNumber]['tempsDeResolution']; $TempsResolutionPartie+=$tabEnigme[$randomNumber]->getTempsDeResolution();
unset($tabIndex[$randomNumber]); unset($tabIndex[$randomNumber]);
} }
$partie=new Partie($idMax+1,$tabEnigme); $partie=new Partie($newId,$tabEnigme);
return $partie; return $partie;
} }

@ -60,6 +60,20 @@ class UserModel
$error = "404"; $error = "404";
require($rep . $vues['erreur']); require($rep . $vues['erreur']);
} }
if ($this->partie_gateway->partieInQueueExists()) {
$tabEnigme = $this->enigme_gateway->findMultiEnigma();
$idNewPartie = $this->partie_gateway->findPartieMaxId();
$partie=$this->partie_gateway->creerPartieMulti($idNewPartie,$tabEnigme);
}
else{
$IdPartieInQueue = $this->partie_gateway->findPartieInQueue();
$tabEnigme = $this->enigme_gateway->findEnigmaFromPartie($Idpartie);
$partie = $this->partie_gateway->creerPartieMulti($IdPartieInQueue, $tabEnigme);
}
$this->utilisateur_gateway->addToQueue($_SESSION['utilisateur'],$partie);
if ($this->utilisateur_gateway->queueFilled())
echo "Partie is launched"
// $this->launchGame();
} }
public function logout() public function logout()

@ -42,9 +42,10 @@ class VisitorModel
throw (new Exception("Email déjà utilisé")); throw (new Exception("Email déjà utilisé"));
} }
$password = password_hash($_REQUEST['password'] . $sel, PASSWORD_DEFAULT); $password = password_hash($_REQUEST['password'] . $sel, PASSWORD_DEFAULT);
$Utilisateur = new Utilisateur($_REQUEST['email'], $_REQUEST['username'], $password, false); $utilisateur = new Utilisateur($_REQUEST['email'], $_REQUEST['username'], $password, false);
$this->utilisateur_gateway->insert($Utilisateur); $this->utilisateur_gateway->insert($utilisateur);
$_SESSION['role'] = 'user'; $_SESSION['role'] = 'user';
$_SESSION['utilisateur'] = $utilisateur;
require($rep . $vues['main']); require($rep . $vues['main']);
} catch (PDOException $e) { } catch (PDOException $e) {
$error = "Erreur de connexion à la base de données."; $error = "Erreur de connexion à la base de données.";
@ -58,8 +59,8 @@ class VisitorModel
{ {
global $rep, $vues, $sel, $error; global $rep, $vues, $sel, $error;
try { try {
$Utilisateur = $this->utilisateur_gateway->getUtilisateurByEmail($_REQUEST['email']); $utilisateur = $this->utilisateur_gateway->getUtilisateurByEmail($_REQUEST['email']);
if ($Utilisateur->getEmail() == "null") { if ($utilisateur->getEmail() == "null") {
$error = "Utilisateur non trouvé."; $error = "Utilisateur non trouvé.";
throw new Exception("Utilisateur introuvable"); throw new Exception("Utilisateur introuvable");
} }
@ -74,7 +75,7 @@ class VisitorModel
} else { } else {
$_SESSION['role'] = "user"; $_SESSION['role'] = "user";
} }
$_SESSION['utilisateur'] = $utilisateur;
$_SESSION['connected'] = 'true'; $_SESSION['connected'] = 'true';
require($rep . $vues['main']); require($rep . $vues['main']);
} catch (Exception $e) { } catch (Exception $e) {

@ -54,6 +54,6 @@ PRIMARY KEY(partie, enigme)
CREATE TABLE Participer( CREATE TABLE Participer(
partie int REFERENCES Partie(id), partie int REFERENCES Partie(id),
joueur varchar(50) REFERENCES Joueur(email), joueur varchar(50) REFERENCES Joueur(email),
etat int CHECK (etat IN (0,1,2)), etat int CHECK (etat IN (0,1,2)), -- etat 0 = enAttente etat 1 = enCours etat 2 = fini
PRIMARY KEY(partie, joueur) PRIMARY KEY(partie, joueur)
); );

Loading…
Cancel
Save