Menu

Exemple Java

Sebastien Duthil Joël Matteotti
There is a newer version of this page. You can find it here.

Exemple de programme Java communiquant avec TuxDroidServer

ATTENTION !! Le projet étant encore au tout début de sont développement il se peut que ce code ne fonctionne pas correctement ou pas du tout avec la dernière révision du SVN.



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.

Il s'agit que d'un simple squeltte d'un programme (avec quelques fonction utilisé 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.

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.
        } 
        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);
        }
    }
}

MongoDB Logo MongoDB