script pour serveur tetrinet

script pour serveur tetrinet - Divers - Programmation

Marsh Posté le 17-02-2010 à 22:32:52    

Bonjour,
 
Je cherche le moyen d'afficher sur un de mes sites le nombre de joueurs présent sur mon serveur tetrinet.
Je ne trouve aucune documentation, ni aucun tuto, ni aucunes bonne âme pour m'indiquer le moyen d'y parvenir.
Pourtant de nombreuses personnes y parviennent, mais personne ne dis comment.
 
Un exemple ici : Hi,
 
http://c3p0.reverse.net/~sl/servers.html
 
Il va sans dire que j'ai essayé de contacter les webmaster de ces différents sites, et je pense raisonnablement qu'au bout d'un mois, je peux penser que je n'aurais jamais de réponses.
 
Sauriez vous m'aider d'une quelconque façon, sachant que mon ami google est muet sur le sujet après plusieurs semaines de recherches...
 
Merci d'avance.
 

Reply

Marsh Posté le 17-02-2010 à 22:32:52   

Reply

Marsh Posté le 17-02-2010 à 23:29:29    

Aucune question de programmation n'étant posée, je ferme ce sujet.

 

Essaie de voir dans la documentation de tetrinet.

 

Edit : suite à discussion avec le PO, je réouvre. Cependant il faudrait apporter plus de précisions au sujet.
Pistes : fichiers de log tetrinet à parser, ou scan des ports ouverts ?


Message édité par Elmoricq le 18-02-2010 à 08:03:52
Reply

Marsh Posté le 18-02-2010 à 11:34:06    

Pas de problème.
 
Alors, le serveur tourne sous jetrix qui est un serveur en java.
Les ports sont 31456,31457 et 31458 en tcp
 
Il y a bien des fichiers log, mais ce sont des fichiers d'accès uniquement.
 
Le serveur jetrix propose l'inclusion de ce qu'ils appellent "filtres" qui serait une voie afin de parvenir au but car en contact direct avec le serveur.
 
Les seules information pour cela sont ici : http://jetrix.sourceforge.net/dev-guide.php
 
D'après ce que j'ai pu lire/comprendre les ports ont l'utilisation suivante :
31456 : IRC
31457 : Tetrinet
31458 : tspec (accès en spectateur simple)
 
Après avoir fouillé partout sur internet, j'ai vu que le dev de jetrix avait en projet en 2005 de mettre cette fonction, mais il n'a jamais donné suite.
Il prévoyait que le serveur envoi ces données dans une base mysql afin que cela puisse être utilisé ensuite facilement.
 
Je pense, mais je peux me tromper, que la meilleure façon de procéder serait de faire l'un de ces fameux "filtres", bien que je ne vois pas ni comment faire, ni par ou commencer (java et moi n'étant pas du tout copains contrairement à php)
 
Donc est-ce que je me trompe de voie ?
Si oui, comment procéder ?
Si non, comment faire ?
 
Merci par avance.

Reply

Marsh Posté le 18-02-2010 à 13:52:58    

Désolé du double post, mais j'ai des informations additionnelles :
 
Un fichier xml contenant les informations de mon serveur sont disponibles à cette adresse : http://servers.tetrinet.fr/server.xml?id=109
Mais je ne sais pas comment parser cela efficacement.
 
sinon, j'ai enfin réussi à avoir un contact avec le développeur de jettrix (serveur tetrniet java) qui m'indique ceci :
- Le nombre de joueurs est récupérable via un port spécial (cf http://jetrix.sourceforge.net/dev- [...] ction2-5).  
 
La deuxieme information m'intéresse sacrément, mais comment envoyer la fameuse commande sur le port 31457 par PHP ?
Car dans ce cas, j'envoie listuser sur le port en question, après je récupère les "name" et du coup, je peux non seulement avoir le nombre de joueurs, mais aussi leurs pseudonymes.
 
Merci


Message édité par bagu le 18-02-2010 à 13:54:45
Reply

Marsh Posté le 19-02-2010 à 11:57:46    

Encore un poste, triple, beuark, mais vu le peu de réaction, cela apparait comme une sorte de up...
 
Je m'en suis en partie sorti avec le code suivant :

Code :
  1. //players information tetrinet
  2.  $reader = new XMLReader();
  3.  $reader->open('http://servers.tetrinet.fr/server.xml?id=109');
  4.  while($reader->read())
  5.  {
  6.   if ($reader->nodeType == XMLREADER::ELEMENT)
  7.   {
  8.    if ($reader->localName == 'tetrinet-server')
  9.    {
  10.     $nbplayer = (int)$reader->getAttribute('players');
  11.    }
  12.    if ($reader->localName == 'player' && $nbplayer != '0')
  13.    {
  14.     echo $reader->getAttribute('name');
  15.    }
  16.   }
  17.  }
  18.  $reader->close();
  19.  unset($reader);
  20.  // fin list utilisateurs tetrinet


 
ou http://servers.tetrinet.fr/server.xml?id=109 correspond aux information de mon serveur sur le site servers.tetrinet.fr
Cependant, deux inconvénients :
1-L'actualisation est toutes les minutes et plus lente qu'avec un module dans le serveur 'en direct'
2-Cela ralenti pas mal le chargement de la page
 
Pour le 1- il faudrait que je sache programmer en java (ce qui n'est pas le cas) donc les bonnes âmes sont les bienvenue.
Pour le 2- savez vous comment réalisez un chargement asynchrone ?
 
Merci d'avance


Message édité par bagu le 19-02-2010 à 12:38:21
Reply

Marsh Posté le 01-03-2010 à 02:25:20    

J'ai résolu l'ensemble de mes besoins grâce à ce code (merci juju):
 

Code :
  1. function get_tetrinet_users(){
  2. $tableau=array();
  3. $fp = fsockopen("127.0.0.1", 31457, $errno, $errstr, 30);
  4. if (!$fp)
  5. {
  6.  echo "$errstr ($errno)<br />n";
  7. } else {
  8.  $out = "listuser".chr(0xFF);
  9.  fwrite($fp, $out);
  10.  while (true) {
  11.   $char = fgets($fp, 2);
  12.   if ($char != chr(0x0A))
  13.   {
  14.    $line .= $char;
  15.   } else {
  16.    if ($line == "+OK";)
  17.    {
  18.     break;
  19.    } else {
  20.     $chunks = explode(' ', $line, 2);
  21.     $tableau[] = substr($chunks[0], 1, strlen($chunks[0])-2);
  22.     $line = "";
  23.    }
  24.   }
  25.  }
  26.  fclose($fp);
  27. }
  28. return $tableau;
  29. }


ou on remplace 127.0.0.1 par l'adresse du serveur.
C'est infiniment plus rapide, et pour le chargement asynchrone, j'ai utilisé prototype.
 
Je poste cela ici car je sais ne pas être le seul à chercher, et que cela servira à d'autres...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed