Salut
Bon j'ai bien avancé sur mon sujet, j'arrive à faire quasiment exactement ce que je veux. Il n'y a que le moyen que j'ai employé pour communiquer entre mon appli et php qui ne me plait pas trop ( via un fichier temporaire dans /tmp ). En attendant de trouver mieux, je vais conserver celui-ci, ca me permet de tester le principe.
Voici mes sources ( un peu plus mis au propre :
index.php
Code :
- <html>
- <head>
- <script type="text/javascript" src="jquery-1.9.1.js"></script>
- </head>
- <body>
- <script language = "JavaScript">
- function addslashes(ch)
- {
- ch = ch.replace(/\\/g,"\\\\" )
- ch = ch.replace(/\'/g,"\\'" )
- ch = ch.replace(/\"/g,"\\\"" )
- return ch
- }
- var mytimer;
- function flash()
- {
- var opts = "source=" + addslashes("http://172.17.15.205/module1.hex" ) +"&cible=" + addslashes("udp://172.17.255.255:56733" ) + "&options=" + addslashes("--load-eeprom --load-flash --enable-status" ) ;
- //alert( opts );
- $('.bargraph').width(0);
- $('.status').text('status : En cours');
- $.ajax({
- type : "GET",
- url : "flash.php",
- data : opts ,
- success : OnFlashSuccess,
- error : OnFlashFailed
- });
- mytimer = window.setInterval( "Polling()" , 100 );
- }
- function check()
- {
- var opts = "source=" + addslashes("http://172.17.15.205/module1.hex" ) +"&cible=" + addslashes("udp://172.17.255.255:56733" ) + "&options=" + addslashes("--load-eeprom --disable-z0 --disable-z1-2-3-4-5 --enable-read-id" ) ;
- //alert( opts );
- $.ajax({
- type : "GET",
- url : "check.php",
- data : opts ,
- success : OnCheckSuccess,
- error : OnCheckFailed
- });
- }
- function OnCheckSuccess( result )
- {
- if ( result == 0 )
- {
- $('.status').text('status : module present.');
- else
- {
- $('.status').text('status : module non present.');
- }
- }
- function OnCheckFailed ( result )
- {
- $('.status').text('status : ERROR');
- }
- function Polling()
- {
- $.ajax({
- type :"GET",
- url :"get.php",
- data : "ring=5&canid=16",
- success : OnPollingSuccess
- });
- }
- function OnPollingSuccess( result )
- {
- var value;
- var phrase = result.split("/" );
- var encours = phrase[0];
- var phrase2 = phrase[1].split(":" );
- var total = phrase2[0];
- var step = phrase2[1];
- value = encours / total * 100 + "%";
- if ( total == 0 ) value = 0;
- $('.bargraph').width( value );
- // step
- if ( step == 1 ) color = "pink";
- else if ( step == 2 ) color = "red" ;
- else if ( step == 3 ) color = "yellow";
- else if ( step == 4 ) color = "green";
- else if ( step == 5 ) color = "blue";
- else if ( step == 6 ) color = "gold";
- else if ( step == 7 ) color = "grey";
- else if ( step == 8 ) color = "maroon";
- else if ( step == 9 ) color = "bronze";
- else if ( step == 10 ) color = "aqua";
- //color = "#c0d9d9";
- $('.bargraph').css("background-color" , color );
- function OnFlashSuccess( result )
- {
- $('.status').text('status : OK');
- clearInterval( mytimer) ;
- alert( result );
- }
- function OnFlashFailed ( result )
- {
- $('.status').after('status : echec');
- clearInterval( mytimer );
- }
- </script>
- <table>
- <tr>
- <td>
- <input type="button" value="flash" name="LeBouton" onClick="javascript:flash()">
- </td>
- <td>
- <input type="button" value="check" name="checkbouton" onClick="javascript:check()">
- </td>
- <td>
- <div style="width:500px; height:20px;background-color:black">
- <div class="bargraph" style="height:100%;width:0%;background-color:pink">
- </div>
- </div>
- </td>
- <td>
- <p class="status">status : </p>
- </td>
- </tr>
- </table>
- </body>
- </html>
|
get.php ( qui me permet de communiquer avec mon appli )
Code :
- <?php
- $path = '/tmp/status_' . $_GET["ring"] . '_' . $_GET["canid"] . '.txt';
- $tab = file( $path );
- echo $tab[0];
- ?>
|
flash.php ( permet d appeler mon exe pour flasher mon appareil )
Code :
- <?php
- $command = "./test --source " . $_GET["source"] . " --cible " . $_GET["cible"] . " " . $_GET["options"] ;
- passthru ($command);
- ?>
|
check.php ( permet de tester la présence de mon appareil. C est la valeur de retour de l exe qui m indique que c est ok ou non )
Code :
- <?php
- $command = "./test --source " . $_GET["source"] . " --cible " . $_GET["cible"] . " " . $_GET["options"] ;
- exec ($command , $output , $returnvar);
- echo $returnvar;
- ?>
|
Alors j'ai quelques questions :
- y a-t-il des critiques à faire sur ce que j'ai fait ? Je suis totalement débutant en programmation orienté web. Je viens du C/C++ donc je n'ai pas les mêmes automatismes.
- ce bout de code est un essai. J'aimerai le généraliser, car en effet je n'ai pas 1 appareil à tester mais une centaine. En gros, j'aimerai créer autant de lignes que d'appareils, et cette information, je l'ai dans un fichier généré en XML par un de nos outils de configuration. J'aimerai donc créer un ensemble de script php qui vont parser ce fichier XML et générer autant de lignes que d'appareil, en dupliquant le code de mon exemple ci-dessus :
* y a-t-il des fonctions simples pour parser du XML en php ?
* ou dois-je plutot m'orienter vers XSL + XML pour générer du HTML ( en effet le fichier index.php n'est en réalité pas du php, c est du HTML + javascript )
* j'ai remarqué ( et c'est normal ) que quand je recharge la page alors que je suis en cours de traitement, je perds tout ( bien que le traitement continue tout seul coté serveur ). Que devrais-je faire ? interdire de recharger la page ( tant que possible ) ? tenter de mettre un mécanisme de resynchro quand je recharge la page ? ou bien laisser tel quel, tant pis pour l'utilisateur ?
- plus une question HTML : j'ai mis un tableau pour aligner horizontalement mes boutons , car je n'ai pas réussi à le faire avec des div, la barre de progression se mettait toujours en dessous des boutons, ainsi que mon <p></p> qui me sert de texte de status. Comment faire sans tableau ? ou alors ce n'est pas si grave d'utiliser les tableaux ? ( j avais cru entendre qu il fallait éviter les tableaux ).
- est-ce que le principe suivant pour générer ma page automatiquement est envisageable ? :
je compte faire autant de <tr> que d'appareil que j'ai , et pour chaque <tr> , les boutons appelleront la même fonction javascript mais avec en plus en paramètre les chemins spécifiques de chaque config d'appareil.
je compte générer un "class" spécifique pour chaque "bargraph" et chaque "status" ( genre class="bargraph_id" et class="status_id" ) mais ca ne me semble pas très propre. Dois je plutot garder la même classe pour tous, et plutot mettre une classe parent dans le <tr> ( si c'est possible ) ? Ou bien encore, dois-je utiliser une autre méthode ? En effet, je me suis servi des classes pour identifier mes objets, et je me sers de jquery pour les modifier dynamiquement.
Je crois que c'est tout
Merci pour votre aide précieuse