You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Scripted/WEB/Model/UserModel.php

104 lines
3.6 KiB

<?php
class UserModel
{
private EnigmeGateway $enigme_gateway;
private PartieGateway $partie_gateway;
private UtilisateurGateway $utilisateur_gateway;
private Nettoyage $nettoyage;
private Validation $validation;
function __construct()
{
try {
global $error, $view, $rep;
$this->enigme_gateway = new EnigmeGateway();
$this->partie_gateway = new PartieGateway();
$this->utilisateur_gateway = new UtilisateurGateway();
$this->nettoyage = new Nettoyage();
$this->validation = new Validation();
} catch (Exception $e) {
$error = $e->getMessage();
require($rep . $view['erreur']);
}
}
public function addToQueue()
{
echo '1';
var_dump($this->utilisateur_gateway->isAlreadyInQueue($_SESSION['utilisateur']));
if ($this->utilisateur_gateway->isAlreadyInqueue($_SESSION['utilisateur'])) {
var_dump($this->utilisateur_gateway->queueFilled());
if($this->utilisateur_gateway->queueFilled())
{
$_REQUEST['action']='launchGame';
var_dump($_REQUEST['action']);
}
return;
}
echo '2';
if (!$this->partie_gateway->partieInQueueExists()) {
echo '3';
$tabEnigme = $this->enigme_gateway->findMultiEnigma();
$idNewPartie = $this->partie_gateway->findPartieMaxId();
$partie = $this->partie_gateway->creerPartieMulti($idNewPartie, $tabEnigme);
} else {
echo '4';
$idPartieInQueue = $this->partie_gateway->findPartieInQueue();
echo '5';
$tabEnigme = $this->enigme_gateway->findEnigmaFromPartie($idPartieInQueue);
echo '6';
$partie = $this->partie_gateway->rejoindrePartieMulti($idPartieInQueue, $tabEnigme);
echo '7';
}
echo '8';
$this->utilisateur_gateway->addToQueue($_SESSION['utilisateur'], $partie);
$this->Queue();
}
public function Queue(){
global $port,$serverAdress;
// pas d'arrêt d'éxécution du script (No timeout)
set_time_limit(0);
// Créer une socket
$socket = socket_create(AF_INET, SOCK_STREAM,0) or die("la socket n'a pas pu être crée\n");
// connecter la socket à l'adresse ip et au port du serveur
$result = socket_connect($socket,$serverAdress,$port) or die("la socket n'a pas pu être attachée au serveur à l'adresse ");
$request="Queuing";
$response="";
while(strcmp($response,"")>=0){
$response=socket_read($socket,1024);
sleep(1);
}
}
public function findUserGroup() : int {
return $this->partie_gateway->findPartieInQueue();
}
public function launchGame()
{
$this->utilisateur_gateway->launchGame($_SESSION['utilisateur']);
}
public function logout()
{
session_unset();
session_destroy();
$_SESSION = array();
$_SESSION['role'] = 'visitor';
header('Location: index.php');
}
public function getEnigmeByOrdre(int $num) : Enigme
{
$tabEnigme = $this->enigme_gateway->findByOrdre($num);
if ($tabEnigme == null) {
$last = $this->enigme_gateway->findLastEnigmaByOrdre();
if ($last[0]->getOrdre() == ($num - 1)){
return new Enigme(1,"","","","","");
}
throw new Exception("Enigme non trouvée");
}
return $tabEnigme[0];
}
}