Skip to content

Exemple CSharp

Joel Matteotti edited this page Apr 26, 2014 · 1 revision

Exemple de programme C# communiquant avec TuxDroidServer

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.

using System;                 
using System.Text;              /* Encodage des textes */
using System.Net;               /* IPEndPoint */
using System.Net.Sockets;       /* Socket */
using System.Threading;         /* Thread */


namespace TuxClient
{
    class Program
    {
        /* Informations de connexion */
        private static IPEndPoint server = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9595);  /* penser à changer l'ip et le port si nécessaire */                
        
        /* création de la socket */
        private static Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        /* appuie sur l'aile gauche */
        private static void onLeftButtonPressed()
        {
            Console.WriteLine("Appuie sur l'aile gaauche");
        }

        /* appuie sur l'aile droite */
        private static void onRightButtonPressed()
        {
            Console.WriteLine("Appuie sur l'aile droite");
        }

        /* appuie sur le bouton de la tête */
        private static void onHeadButtonPressed()
        {
            Console.WriteLine("Appuie sur le bouton de la tête");
        }

        /* appuie sur un bouton de la télécommande */
        private static void onRemoteButtonPressed(string button)
        {
            Console.WriteLine("Télécommanjde: {0}", button);
        }

        /* on viens de brancher le chargeur */
        private static void onChargerPlugged()
        {
            Console.WriteLine("Chargeur brancher");
        }

        /* on viens de débrancher le charger */
        private static void onChargerUnPlugged()
        {
            Console.WriteLine("Charger débrancher");
        }

        /* on viens de connecter le dongle */
        private static void onDongleConnected()
        {
            Console.WriteLine("Dongle connecter");
        }

        /* on viens de débrancher le dongle */
        private static void onDongleDisConnected()
        {
            Console.WriteLine("Dongle déconnecter");
        }

        /* Fonction de lecture des messges en provenance du server */
        private static void ReadServer()
        {
            while (true)
            {
                byte[] buffer = new byte[1024];           /* buffer dans lequel seront stockées les données recus */
                int iResult = socket.Receive(buffer);     /* lis les données en provenance du server et les stock dans le buffer */

                /* s'il y a des données de recus */
                if (iResult > 0)
                {
                    string message = Encoding.ASCII.GetString(buffer, 0, iResult);      /* convertit le tableau de byte créer par la fonction Receive en un string */
                    message = message.Replace("\r", "");                                /* retire le saut de ligne se trouvant en fin de message */
                    message = message.Replace(((char)0).ToString(), "");                /* supprime les caractères <null> pouvant se trouver dans le message (taille de buffer plus grand que le message) */

                    
                    /* il s'agit de #TUXBUTTON ou #TUXREMOTE */
                    if (message.StartsWith("#TUXBUTTON") || message.StartsWith("#TUXREMOTE"))
                    {
                        string[] sp = message.Split(':');

                        if (sp[1].Equals("LEFT"))
                            onLeftButtonPressed();
                        else if (sp[1].Equals("RIGHT"))
                            onRightButtonPressed();
                        else if (sp[1].Equals("HEAD"))
                            onHeadButtonPressed();
                        else
                            onRemoteButtonPressed(sp[1]);
                    
                    }
                    else
                    {
                        /* gestion des événements autre que les boutons */
                        if (message.StartsWith("#") && message.Contains(":"))
                        {
                            string[] sp = message.Split(':');

                            switch (sp[0])
                            {
                                case "#TUXDROIDSERVER":
                                {
                                    /* L'authentification avec Tux_Key() a réussi */
                                    if(sp[1].Equals("VALIDEDKEY"))
                                    {
                                        /* On défini donc un identifiant unique pour notre application.
                                        (Cela est devenu obligatoire en révision 151) */

                                        sendMessage("Tux_SetId(monapp1234)");
                                    }
                                }
                                break;

                                case "#TUXCHARGER":
                                    {
                                        if (sp[1].Equals("PLUGGED"))
                                            onChargerPlugged();
                                        if (sp[1].Equals("UNPLUGGED"))
                                            onChargerUnPlugged();
                                    }
                                    break;
                                case "#TUXDONGLE":
                                    {
                                        if (sp[1].Equals("CONNECTED"))
                                            onDongleConnected();
                                        if (sp[1].Equals("DISCONNECTED"))
                                            onDongleDisConnected();
                                    }
                                    break;

                            }
                        }
                        else /* tout autre type de message */
                        {
                            Console.WriteLine("server: {0}", message);
                        }
                    }

                }

            }
        }

        /* Fonction d'envoie de message au server */
        private static void sendMessage(string message)
        {
            socket.Send(Encoding.UTF8.GetBytes(message)); /* les messages doivent êtres envoyés au server encodés en UTF-8 */
        }

        public static void Main(string[] args)
        {
            try
            {
                /* connexion au server */
                socket.Connect(server);

                /* envoie de l'infos d'identification au server */
                sendMessage("Tux_Key(test)"); /* voir le wiki au sujet de Tux_Key pour plus d'infos */

                /* créatuib d'un thread qui lira les messages du server */
                Thread T = new Thread(new ThreadStart(ReadServer));
                T.IsBackground = true;
                T.Start();


                /* Exemple d'utilisation */
                string stdin;
                while (!(stdin = Console.ReadLine()).Equals("quit"))
                {
                    if (stdin.Equals("flippers up"))
                        sendMessage("Tux_Flippers(Up)");
                    
                    if (stdin.Equals("flippers down"))
                        sendMessage("Tux_Flippers(Down)");

                }


            }
            catch (SocketException se)
            {
                Console.WriteLine("Impossible de se connecter: " + se.ToString());
            }
        }
    }
}
Clone this wiki locally