TuxDroidServer Français
Status: Alpha
Brought to you by:
joelmatteotti
Il ne s'agit que d'un simple squelette d'un programme (avec quelques fonctions utilisées pour l'exemple) communiquant avec TuxDroidServer, en se basant sur ce code il est très facile de créer un programme complet comme par exemple une interface graphique qui gérera TuxDroid via le TuxDroidServer.
NOTE: Pour utiliser ce code vous devez utiliser au minimum Java 7, dans le cas contraire il vous faudra remplacer les switch() par des condition if/else.
#!java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class TuxDroid
{
private static Socket socket = null; /* déclaration de la socket */
private static PrintWriter out = null; /* déclaratiion du buffer de sortie */
private static BufferedReader in = null; /* déclaration du buffer d'entrée */
/***
* Fonction appeller lors de l'appuie sur le bouton de la tête
*/
private static void onHeadButton()
{
System.out.println("bouton de la tête");
}
/***
* Fonction appeller lors de l'appuie de l'aile gauche
*/
private static void onLeftButton()
{
System.out.println("bouton gauche");
}
/***
* Fonction appeller lors de l'appuie de l'aile droite
*/
private static void onRightButton()
{
System.out.println("bouton droit");
}
/***
* Fonction appeller lorsqu'on branche le chargeur au TuxDroid
*/
private static void onChargerPlugged()
{
//
}
/***
* Fonction appeller lorsqu'on débranche le chargeur
*/
private static void onChargerUnPlugged()
{
//
}
/***
* Fonction appeller lorsqu'on connecte le dongle au PC
*/
private static void onDongleConnected()
{
//
}
/***
* Fonction appeller lorsqu'on débranche le dongle
*/
private static void onDongleDisConnected()
{
//
}
/***
* Fonction appeller lors de l'appuie d'un bouton de la télécommande
*
* @param button Nom du boutton qui a été appuyer
*/
private static void onRemoteButton(String button)
{
switch(button)
{
case "K_RED": //bouton rouge de la télécommande
{
out.println("Tux_State(16)");
System.out.println("Niveau de batterie: "+getServerResponse());
}
break;
}
}
/***
* Permet d'obtenir une réponse du server après requête
*
* @return Renvoie le message du server
*/
private static String getServerResponse()
{
String str="";
try
{
int x;
while((x = in.read()) != '\r')
{
if(x > 1)
str=str+(char)x;
}
return str;
}
catch(IOException ioe)
{
return "";
}
}
/***
* Fonction permettant de gérer les événements du TuxDroid comme par exemple l'appuie d'un bouton
*
* @param message
*/
private static void manageEvents(String message)
{
String[] sp = null;
if(message.startsWith("#TUXBUTTON") || message.startsWith("#TUXREMOTE"))
{
//c'est un bouton
sp = message.split(":");
if(sp[0].equalsIgnoreCase("#TUXBUTTON"))
{
switch(sp[1])
{
case "LEFT": onLeftButton();
break;
case "RIGHT": onRightButton();
break;
case "HEAD": onHeadButton();
break;
}
}
if(sp[0].equalsIgnoreCase("#TUXREMOTE"))
{
//télécommande
onRemoteButton(sp[1]);
}
}
else
{
if(message.startsWith("#TUXCHARGER"))
{
sp = message.split(":");
switch(sp[1])
{
case "PLUGGED": onChargerPlugged();
break;
case "UNPLUGGED": onChargerUnPlugged();
break;
}
}
if(message.startsWith("#TUXDONGLE"))
{
sp = message.split(":");
switch(sp[1])
{
case "CONNECTED": onDongleConnected();
break;
case "DISCONNECTED": onDongleDisConnected();
break;
}
}
}
}
public static void main(String[] args) throws IOException
{
/* tente de se connecter au server */
try
{
socket = new Socket("192.168.1.43", 9090); // ip et port d'écoute de TuxDroidServer
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out.println("Tux_Key(test)"); //regarder la page wiki de la commande Tux_Key pour plus d'informations là dessus.
try
{
/*attend un peut pour être sur que le server à pris Tux_Key() en compte
avant d'envoyer la seconde commande*/
Thread.currentThread().sleep(100);
}
catch(ItrerruptedException ie)
{
}
out.println("Tux_SetId(monapp1234)"); //défini un identifiant unique (devenu obligatoire en révision 151)
}
catch (IOException e)
{
return;
}
String str="";
int x;
// Boucle de gestion des événements
while(true)
{
str="";
while((x = in.read()) != '\r')
{
if(x > 31) /* de 0 à 31 il s'agit de code spéciaux du tableau ASCII */
str=str+(char)x;
}
manageEvents(str);
}
}
}