game/connexion.php

143 lines
5.2 KiB
PHP

<?php
define("INDEX", 1);
$chrono_start = microtime();
$onyx = @file_get_contents('./.onyx') or die("Configuration introuvable.");
define("_FCORE",trim($onyx));
$_SERVER['REMOTE_ADDR'] = "127.0.0.1";
require_once(_FCORE."kernel.php");
require_once(_FCORE."hb_game/tables.php");
set_time_limit(0);
error_reporting(E_ALL);
echo "Demarrage du serveur ...";
$socket = socket_create(AF_INET, SOCK_STREAM, 0);
@socket_bind($socket, '127.0.0.1', 13650) or die("\nERREUR : Port déja utilise");
socket_listen($socket);
$bdd = new bdd();
echo " Serveur pret, en attente.\n\n";
while(true) {
$client = socket_accept($socket);
//On attend une requête
$reception = socket_read($client, 255);
echo "Reception d'une connexion en provenance de ".$reception."\n";
if (!empty($reception)) {
$ip = $reception;
$_SERVER['REMOTE_ADDR'] = $ip;
//On renvoie le type de connexion au serveur
socket_write($client, "secure", 6);
//On attend une requête contenant le nom de l'utilisateur
$HB_login = socket_read($client, 255);
$bdd->connexion();
$bdd->escape($HB_login);
$res = $bdd->unique_query("SELECT mdp_var FROM $table_user WHERE pseudo = '$HB_login';");
$bdd->deconnexion();
if (empty($res['mdp_var'])) socket_write($client, 'not found', 9);
else socket_write($client, $res['mdp_var'], 255);
//On attend une requête contenant le mot de passe
$HB_password = socket_read($client, 255);
$bdd->connexion();
$bdd->escape($HB_password);
$resultat = $bdd->unique_query("SELECT id, mv, last_visite, auth_level, raisonmv FROM $table_user WHERE pseudo = '$HB_login' AND mdp = '$HB_password';");
if ($resultat) {
$id = $resultat['id'];
$reqPlan = $bdd->query("SELECT id, file_bat, file_tech, file_cas, file_vais, file_ter FROM $table_planete WHERE id_user = '$id' ORDER BY id ASC;");
$resultatP = $reqPlan[0];
if (!$reqPlan) {
$bdd->deconnexion();
socket_write($client, 'ERR:Impossible de trouver votre planète !', 41);
}
else {
if ($resultat['mv'] != 0) {
if ($resultat['last_visite']+259200 > time() && $resultat['auth_level'] < 2) {
if ($resultat['mv'] == 3) socket_write($client, 'MV3:'.$resultat['raisonmv'], 260);
elseif ($resultat['mv'] == 2) socket_write($client, 'MV2:'.($resultat['last_visite']+259200).':'.$resultat['raisonmv'], 300);
else socket_write($client, 'MV1:'.$resultat['last_visite']+259200, 255);
}
else {
$bdd->query("UPDATE $table_user SET mv = '0' WHERE id = '$id';");
$bdd->query("UPDATE $table_planete SET timestamp = '".time()."' WHERE id_user = '$id';");
//On fait repartir à 0 les files d'attente
include_once(_FCORE."hb_game/Class/class.gerefile.php");
$cntplan = count($reqPlan);
for ($i = 0; $i < $cntplan; $i++) {
if (!empty($reqPlan[$i]['file_bat'])) {
$file = unserialize($reqPlan[$i]['file_bat']);
$file->timestamp = time();
$fileBat = serialize($file);
$bdd->escape($fileBat);
}
else $fileBat = '';
if (!empty($reqPlan[$i]['file_tech'])) {
$file = unserialize($reqPlan[$i]['file_tech']);
$file->timestamp = time();
$fileTech = serialize($file);
$bdd->escape($fileTech);
}
else $fileTech = '';
if (!empty($reqPlan[$i]['file_cas'])) {
$file = unserialize($reqPlan[$i]['file_cas']);
$file->timestamp = time();
$fileCas = serialize($file);
$bdd->escape($fileCas);
}
else $fileCas = '';
if (!empty($reqPlan[$i]['file_vais'])) {
$file = unserialize($reqPlan[$i]['file_vais']);
$file->timestamp = time();
$fileVais = serialize($file);
$bdd->escape($fileCas);
}
else $fileVais = '';
if (!empty($reqPlan[$i]['file_ter'])) {
$file = unserialize($reqPlan[$i]['file_ter']);
$file->timestamp = time();
$fileTer = serialize($file);
$bdd->escape($fileTer);
}
else $fileTer = '';
$idPlan = $reqPlan[$i]['id'];
$bdd->query("UPDATE $table_planete SET file_bat = '$fileBat', file_tech = '$fileTech', file_cas = '$fileCas', file_vais = '$fileVais', file_ter = '$fileTer' WHERE id = '$idPlan';");
}
}
}
$time = time();
$bdd->query("UPDATE $table_user SET last_visite = '$time', last_ip = '$ip' WHERE id = '$id';");
$bdd->query("INSERT INTO $table_registre_identification (id_util, ip) VALUES ('".$id."','".$ip."');");
$bdd->deconnexion();
$sess = new session();
$sess->load();
$sess->values['connected'] = TRUE;
$sess->values['id'] = $resultat['id'];
$sess->values['idPlan'] = $resultatP['id'];
$sess->values['auth_level'] = $resultat['auth_level'];
$sess->put();
socket_write($client, "ok", 2);
socket_write($client, $config['session_name'], strlen($config['session_name']));
socket_write($client, $sess->cookie, strlen($sess->cookie));
$fin = time() + $config['session_time']."po";
socket_write($client, $fin, strlen($fin));
$sess = false;
unset($sess);
echo "Identification validee pour $HB_login => $fin\n";
}
}
else socket_write($client, 'not found', 9);
}
else socket_write($client, "ERR:La phase d'identification n'a pas encore commence", 49);
socket_close($client);
echo "Fin d'une connexion\n\n";
flush();
}
?>