Raydium 3D Game Engine

Official forum for everything about Raydium, ManiaDrive, MeMak, ...
It is currently Fri Apr 26, 2024 12:28 pm

All times are UTC




Post new topic Reply to topic  [ 14 posts ] 
Author Message
 Post subject: Support d'un proxy HTTP
PostPosted: Fri Mar 17, 2006 1:02 pm 
Offline

Joined: Fri Mar 17, 2006 12:41 pm
Posts: 46
Location: Gif/Yvette, France
Salut,

J'ai regardé pour un moyen de supporter le téléchargement des fichiers manquant avec rayphp via un proxy. 2 solutions ressortent :

-- Utiliser cURL pour gérer les transferts de fichier a la place de file(). J'ai un bout de code qui marche sur mon pc.

Avantage : simple a rajouter, ya juste a mettre --with-curl dans le configure de php4 et rajouter une ou 2 fonctions dans le code php.

Inconvénient : une dépendance de plus. A priori c'est possible de porter sur windows.

-- utiliser les contextes PHP5 pour modifier la prise en charge du transfert de fichiers. Des exemples sont disponibles sur le site php.net

Avantage : tres simple, pas de lib supplémentaire
Inconvénient : passer a PHP5 ;) et les problemes liés, je suppose que le wrapper PHP dans raydium va couiner...

-- tout refaire en C pour avoir une barre de progression ;)

Mis a part la modif dans le configure de php et dans la chaine de compil (-lcurl) je remplace simplement les appels à @file() par get_file_from_web() :

Code:

$GLOBALS['raydium_proxy'] = "http://cache:3128";

function get_file_from_web($url)
{
  $ch = curl_init();
  if (defined($GLOBALS['raydium_proxy']))
    curl_setopt ($ch, CURLOPT_PROXY, $GLOBALS['raydium_proxy']);
  curl_setopt ($ch, CURLOPT_URL, $url);
  curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt ($ch, CURLOPT_TIMEOUT, 5);
  $result = curl_exec ($ch);
  curl_close($ch);
  return $result;
}



Sinon, une idée serait d'afficher une image représentant le réseau lors des appels a getfile.php, vu qu'il peut y avoir une petite attente. A défaut de barre de progression ca peut déja etre une indication que "ca charge".
[/list][/list]


Top
 Profile  
 
 Post subject:
PostPosted: Fri Mar 17, 2006 1:51 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Très intéressant. Ta méthode avec curl est très séduisante : la dépendance n'est pas énorme, c'est portable, et ça demande peu de boulot.
Cependant, je vois ici deux problèmes : rayphp/putfile.php (upload vers le repository) et NuSOAP (services web).
Ils sont tous les deux organisés autour de socket "pures" ("fsockopen()"), et non avec "file()".

Bon, c'est déjà mieux que rien :)

La solution PHP5 est un peu plus large, puisque cette version offre un support natif pour les services web (par contre il faut ré-écrire les scripts ManiaDrive). Je me demande si il n'y a pas déjà eu des tests (positifs) du wrapper avec PHP5. Il ne resterait qu'a s'occuper de putfile.php (c'est un moindre mal).

Le coup de la petite image lors d'un appel aux fonctions PHP get/put/list/webservice est très bonne !


Top
 Profile  
 
 Post subject:
PostPosted: Sat Apr 08, 2006 12:59 pm 
Offline

Joined: Fri Mar 17, 2006 12:41 pm
Posts: 46
Location: Gif/Yvette, France
Salut,

Je vous ai pas oubliés, j'ai déménagé et j'ai commencé un nouveau boulot, ca occupe ;)

J'ai un rayphp fonctionnel derrière un proxy (pour getfile et pour putfile) et j'ai pu donc tester les niveaux supplémentaires de maniadrive :wink: . J'ai pas eu a modifier le serveur. Pour nusoap, ya juste a indiquer un proxy à la création de l'objet :

Code:
// Create the client instance
$client = new soapclient($url,true, "cache", "3128");


Quelques questions :

-- Les scripts PHP zippent les fichiers avant d'envoyer, je me demande si ca ne peut pas etre négocié automatiquement entre le serveur web et le client. Je me renseigne la dessus.

-- Où ranger proprement la conf de Raydium ? (on pourrait envisager de stocker pour tous les jeux des préférences générales (résolution et détails graphiques, préférences réseau (dont ma variable proxy), nick, ...) je sais pas trop comment vous envisagez ca.

-- Visiblement, ya certains fichiers qui ne sont pas dispos sur le repository (les textures du buggy dans test6, ou le décor du train par ex)

-- Je compte bien contribuer mes petites modifs, dites moi si je peux avoir un compte svn (que je connais assez bien par ailleurs donc je pense pouvoir eviter de tout casser ;) ).


Top
 Profile  
 
 Post subject:
PostPosted: Sat Apr 08, 2006 2:25 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Content de te relire :)

Tu sembles avoir trouvé des solutions à tous les fichiers RayPHP pour le proxy, c'est parfait. Je vais effectivement t'ouvrir avec plaisir un compte SVN. Un détail qui m'inquiète cependant : tu sembles dire qu'il manque quelques fichiers sur le repository, ce qui laisserait penser qu'il subsiste encore quelques problèmes avec les proxy. Les fichiers buggy.tga et rail_world.tga sont effectivement présent là bas (le repository est "browsable" à cette adresse avec un navigateur web: http://repository.raydium.org/ si tu as besoin de faire des tests). On essaye de régler ça avec de commiter quoi que ce soit ?

Pour le support du ZIP, le tout se joue pour l'instant à l'extérieur de HTTP (qui effectivement supporte ce genre de fonctionnalités en 1.1). L'avantage étant qu'il nous est possible de contrôler tout ça. Il y a quelque chose qui te gêne avec le support actuel ?

Ensuite, une solution de stockage de la configuration de Raydium existe maintenant depuis quelques mois avec la "base de données" stockée dans le fichier raydium.db qui est idéal pour stocker des params comme le proxy. L'API pour y accéder est assez simple. Je peux t'aider sur ce point, au pire.


Top
 Profile  
 
 Post subject:
PostPosted: Sat Apr 08, 2006 5:04 pm 
Offline

Joined: Fri Mar 17, 2006 12:41 pm
Posts: 46
Location: Gif/Yvette, France
Pour le repository, problème réglé : j'avais positionné un timeout dans cURL a 5 secondes, ce qui permettait de downloader les petits fichiers, mais pas les gros... :roll:

Un coup de chapeau a celui qui a modélisé la locomotive, elle est très jolie :D

Pour le support du zip, rien qui me gène particulièrement, simplement c'est un peu bete de s'embeter avec gzencode et gzdecode (surtout que seulement le premier est fourni avec php...) si c'est pas utile au final ; mais ca marche bien comme ca ;)

Pour la base de donnée je vais modifier pour prendre en compte ; merci pour l'info.


Top
 Profile  
 
 Post subject:
PostPosted: Sat Apr 08, 2006 6:17 pm 
Offline

Joined: Fri Mar 17, 2006 12:41 pm
Posts: 46
Location: Gif/Yvette, France
Concernant le support de la db, j'essaye d'utiliser
Code:
signed char raydium_parser_db_get(char *key, char *value, char *def);


depuis PHP. Pour cela j'ai rajouté cette fonction dans la liste des fonctions exportées dans RegAPI (raydium/reg_api.c), en suivant le modèle de son homologue raydium_parser_db_set()

J'ai le code PHP suivant :
Code:
// set the proxy according to the configuration database
if (raydium_parser_db_get("Proxy", $proxy, null))
{
  // proxy is defined in the db
  $GLOBALS['raydium_proxy'] = $proxy;
}


Et j'obtiens :
Code:
Raydium: register: variable: ERROR: "force" already registered
./ostatcomp.sh: line 10:  8268 Segmentation fault      ./test $2 $3 $4 $5 $6

Je vois pas trop par quel bout prendre le probleme...le tuto sur RayPHP est un peu aride ;)
Un petit eclaircissement serait le bienvenu.


Top
 Profile  
 
 Post subject:
PostPosted: Sun Apr 09, 2006 12:34 am 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Réserve de la mémoire pour ta chaine, car elle est "créé" par PHP, donc avec une taille nulle. Quand elle se retrouve utilisée par le langage C, dans Raydium, cela pose donc bien sûr un problème.

Faire un ...
Code:
$str=str_pad('',200);
// ou
$str="                                          ";

... avant de faire appel à la fonction va régler le problème. Dans le doute, j'ai fait la modification de reg_api.c avec le commit 278, pense donc à effacer ta copie avant de faire un update.

Je t'ai envoyé les infos pour ton compte SVN en message privé.


Top
 Profile  
 
 Post subject:
PostPosted: Sun Apr 09, 2006 2:17 pm 
Offline

Joined: Fri Mar 17, 2006 12:41 pm
Posts: 46
Location: Gif/Yvette, France
Bon, la db marche bien pour RayPHP. Le truc drole c'est que le proxy est autodétecté par cURL grace au système "wpad" de mon réseau. Donc en fait je peux mettre n'importe quoi dans la variable, ca marche.

Pour le nusoap c'est OK, j'obtiens bien les scores, par contre, ce n'est plus automatique ;)
il faut un truc du genre:
Code:
Generic-Proxy;http://cache.rez-gif.supelec.fr:3128/


dans la db. Le slash final est important sinon parse_url se vautre.

Par contre, quand j'essaye de démarrer un circuit Maniadrive que je n'ai pas, le chargement échoue avec :
Code:
Fatal error: Call to undefined function:  raydium_parser_db_get() in /home/phyce/code/raydium-phyce/rayphp/libfile.php on line 4



Je ne comprends pas bien pourquoi une fonction qui est enregistrée par ailleurs (test6, par exemple, marche bien) ne l'est plus dans maniadrive ?

_________________
Phyce


Top
 Profile  
 
 Post subject:
PostPosted: Sun Apr 09, 2006 4:46 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Hahahaha :) Je viens de passer 10 minutes sur ce problème et je me suis fait avoir comme toi ... le responsable du téléchargement n'est pas mania_drive.c ... mais mania2.c ! Il faut donc recompiler mania2.static :)

Par contre, je ne crois pas que libfile.php soit concerné par le proxy ... la fonction file() utilisée dans la fonction read_repositories_file() de ce fichier n'est chargée que de lire un fichier local (la liste des repositories).


Top
 Profile  
 
 Post subject:
PostPosted: Sun Apr 09, 2006 6:44 pm 
Offline

Joined: Fri Mar 17, 2006 12:41 pm
Posts: 46
Location: Gif/Yvette, France
OK, tout marche.

Pour libfile.php, c'est qu'en fait, j'ai pas mal modifié les fichiers dans rayphp : libfile gère maintenant tous ce qui concerne les transferts de fichiers. Du coup getfile.php, putfile.php et listrepos.php sont des petits scripts (~50 lignes) qui utilisent ses fonctions. J'ai intégré les 2 fonctions de dépendances (libdeps.php) dans libfile.php puisque je considère cette librairie comme le rassemblement des fonctions de gestion d'upload/download de fichier. Le proxy est positionné à chaque fois qu'on inclut cette librairie.

J'ai du modifier ostatcomp.sh pour ajouter -lcurl (normal) mais aussi -lopenal pour pouvoir compiler sur mon système : c'est normal ? Sinon, ca compile.

J'ai modifié le Makefile pour prendre curl en compte, et la compile dynamique marche aussi.

En gros, sauf objection, je commite ce soir ;)

_________________
Phyce


Top
 Profile  
 
 Post subject:
PostPosted: Sun Apr 09, 2006 8:10 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Tout est ok pour moi, sauf que -lopenal est déjà présent dans ostatcomp.sh ... Tu as plus d'infos sur ce problème. A mon avis, tu as rajouté -lopenal à la fin de la ligne de compilation, alors que cette dernière est destinée aux liaisons dynamiques (-Wl,-Bdynamic), alors que OpenAL devrait être lié statiquement et est donc placé avant sur la ligne. Cela signifie donc probablement qu'il te manque libopenal.a (openal-devel par exemple).

A propos de curl, tu as probablement eu à modifier le script configure aussi ?


Top
 Profile  
 
 Post subject:
PostPosted: Mon Apr 10, 2006 7:48 pm 
Offline

Joined: Fri Mar 17, 2006 12:41 pm
Posts: 46
Location: Gif/Yvette, France
Je comprends pas bien, j'ai pourtant libopenal.a dans /usr/lib; tant pis, je vais commiter "comme c'etait". De toute facon je n'aime pas trop ostatcomp.sh (cf un autre post).

Xfennec wrote:
A propos de curl, tu as probablement eu à modifier le script configure aussi ?


En effet, j'ai juste rajouté un petit test et un --with-curl au configure de php.

_________________
Phyce


Top
 Profile  
 
 Post subject:
PostPosted: Tue Apr 11, 2006 3:18 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Ok pour le commit. Je n'ai pas eu le temps de faire de tests pour l'instant, mais tout me semble OK (libdeps.php me plaisait bien, mais c'est un détail ;) ).

J'ai fait un petit commit par dessus pour changer deux points : la détection de curl par le configure (la libcurl peut être installée alors que la commande curl ne l'est pas) et la liaison de curl dans ostatcomp.sh qui était en dynamique. Je vais tenter de prendre le temps de te répondre rapidement sur l'autre post à ce sujet :)

Et avant que j'oublie, merci pour ce boulot et pour ton implication !


Top
 Profile  
 
 Post subject:
PostPosted: Thu Apr 13, 2006 8:20 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Pour info, depuis l'intégration de CURL, RayPHP était HS sous windows. J'ai dû bricoler pas mal pour activer l'extension php_curl.dll de php4_ts.dll. Tout est maintenant OK.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 14 posts ] 

All times are UTC


Who is online

Users browsing this forum: No registered users and 166 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group