Package

Source Code of ClientX10

/**
* Classe ClientX10
*
* Classe pour l'envoi de commandes X10 au ServeurX10 via un socket en transmettant un objet de type DataX10.
*
* Client en ligne de commande
*
* Ces paramètres sont passés au programme BottleRocket (pour l'utilitaire br) via le ServeurX10
*
* La syntaxe de la commande ClientX10 sera :
*
*  java ClientX10 [-u Utilitaire] [-hc House_Code] [-kc Key_Code] [-cc Command_Code] [-o Options] [-i ID] [-p Mot_Passe]
*                 [-as IP_Serveur] [-ps Port_Serveur] [-ac IP_Client] [-pc Port_Client]
*
*  Où :
*
*    Utilitaire = br,uc, rf ou pl. br --> BottleRocket, uc --> microcontrôleur et Firecracker (à venir...)
*                                            rf --> Interface RF (à venir...) et  pl --> Interface à courant porteur (à venir...)
*    House_Code = A-P
*    Key_Code = 1-16
*    Command_Code = ON, OFF, DIM, BRIGHT, ALL_ON, ALL_OFF,
*    LAMPS_ON ou LAMPS_OFF
*    Options = Toutes les options possibles de l'utilitaire BottleRocket.
*    ID = numéro de l'utilisateur (à venir)
*    Mot_Passe=Mot de passe de l'utilisateur (à venir)
*    IP_Serveur : Adresse IP du serveur
*    Port_Serveur : Port de communication pour le serveur
*    IP_Client : Adresse IP du client (à venir)
*    Port_Client : Port de communication pour le client (à venir)
*
*
*
*  Par exemple :
*
*            java ClientX10 -u br -hc A -kc 1 -cc ON  -o "--repeat=5 -v"  -as 192.219.68.30 -ps 2222
*
*            java ClientX10 -u br -hc A -cc ALL_ON  -as 192.219.68.30 -ap 2222
*
*            java ClientX10 -u br -o "--house=A --on=1 --repeat=5 -v" -as 192.219.68.30 -ap 2222
*
* Gestion de l'information 247-616-SH
* Hiver 2014
*
* @author Jordan Careau-Beaulieu
* @version Feb 3 2014
*/
import java.io.*;
import java.net.*;

import DataX10.*;

public class ClientX10
{
    Socket _sClient;
    DataX10 _dx10;
    String _sConnError = "";
   
    public static void main(String[] sArgs)
    {
        DataX10 dx10 = new DataX10();
       
        // S'il a eu une erreur dans le parsing on affiche la syntaxe
        if((parseArguments(sArgs, dx10)) == 1)
        {
            printSyntax();
        }
        printDataX10(dx10);
       
       
       
        ClientX10 client = new ClientX10(dx10);
    }
    /* Constructeur de l'objet ClientX10
     *  @param dx10Commande objet dataX10 qui contient les informations
     *      comme l'addresse du serveur, le port, l'utilitaire, le house code, etc.
     */
    public ClientX10(DataX10 dx10Commande)
    {
        _dx10 = dx10Commande;
        try {
            // Objet Socket pour établir la connexion au miniserveur
            _sClient = new Socket(_dx10.getIPAdressServer(),
                    _dx10.getPortServer());
           
            // Requête vers le serveur... (flux de données)
            OutputStream osOut = _sClient.getOutputStream();
            ObjectOutputStream oosOut = new ObjectOutputStream(osOut);
            oosOut.writeObject(_dx10);
           
            // Reception de la réponse du serveur... (flux de données)
            InputStream isIn = _sClient.getInputStream();
            ObjectInputStream oisIn = new ObjectInputStream(isIn);
            //DataX10 dx10Reponse = new DataX10();
            _dx10 = (DataX10) oisIn.readObject();
            System.out.println("Réponse: \n" + _dx10.getMessage());
           
            // Fermeture des objets de flux de données
            oosOut.close();
            osOut.close();
            oisIn.close();
            isIn.close();
           
            // Si tout s'est déroulé correctement on indique qu'il n'y a pas eu d'erreurs
            _sConnError = "";
        }
        catch (UnknownHostException e)
        {
            // Nom ou adresse du miniserveur inexistant
            System.out.println(e.toString());
            // Si il y a eu une erreur on l'indique
            _sConnError = "Serveur non-valide\n";
        }
        catch (IOException e) {
            // Problème de communication réseau
            System.out.println(e.toString());
            _sConnError = "Problème de communication\n";
        }
        catch (SecurityException e) {
            // Problème de sécurité (si cela est géré...)
            System.out.println(e.toString());
            _sConnError = "Problème de sécurité\n";
        }
        catch (ClassNotFoundException e) {
            // Objet indéfinie pour la sérialisation...
            System.out.println(e.toString());
        }
        catch (Exception e) {
        // Autre erreur...
            System.out.println(e.toString());
            _sConnError = "Problème inconnu\n";
        }
    }
   
    /* Méthode pour obtenir l'objet dataX10 de la classe
     *  @returns L'objet dataX10
     */
    public DataX10 getDX10()
    {
        return _dx10;
    }
   
    /* Méthode qui retourne la string d'erreur du clientX10
     *  @returns String Message d'erreur
     */
    public String getErrorStr()
    {
        return _sConnError;
    }
   
    /* Méthode qui traite les arguments reçus de la ligne de commande et
     *  qui construit l'objet dataX10 en fonction de ces commandes.
     *  @param sArgs Tableau de strings contenant les arguments de la ligne de commande
     *  @param dx10 Objet dataX10 qui sera utilisé pour établir la connexion et
     *    qui sera envoyé au serveur.
     */
    public static int parseArguments(String[] sArgs, DataX10 dx10)
    {
        int returnValue = 0;
       
        // S'il n'y a pas d'arguments on retourne une erreur
        if(sArgs.length == 0)
            returnValue = 1;
       
        // Boucle tant que tous les éléments ont été traitées
        for(int i = 0; i < sArgs.length; i++) {
           
            // Si l'argument est l'utilitaire
            if(sArgs[i].equals("-u"))
            {
                // Si l'argument est valide on le place dans l'objet
                if( (sArgs[i+1].equals("br")) || (sArgs[i+1].equals("uc"))
                        || (sArgs[i+1].equals("rf"))
                        || (sArgs[i+1].equals("pl")) )
                {
                    dx10.setUtilitaire(sArgs[i+1]);
                }
                // Si le choix n'est pas valide on retourne une erreur
                else
                {
                    returnValue = 1;
                }
                break;
            }

            // Si l'argument est le house code
            else if(sArgs[i].equals("-hc"))
            {
                // Si le house code est de A-P et n'est qu'un caractere
                // on le place dans l'objet
                if( (sArgs[i+1].matches("[A-P+]")) &&
                        (sArgs[i+1].length() == 1) )
                {
                    dx10.setHouseCode(sArgs[i+1]);
                }
                // Si le choix n'est pas valide on retourne une erreur
                else
                {
                    returnValue = 1;
                }
                break;
            }

            // Si l'argument est le key code
            else if(sArgs[i].equals("-kc"))
            {
                // si le keycode est entre 1 et 16 on le place dans l'objet
                try
                {
                    int iKc = Integer.parseInt(sArgs[i+1]);
                    if( (iKc >= 1) && (iKc <= 16) )
                    {
                        dx10.setKeyCode(sArgs[i+1]);
                    }
                    // Si le choix n'est pas valide on retourne une erreur
                    else
                    {
                        returnValue = 1;
                    }
                }
                // Si la string ne peut etre convertie en int
                catch(Exception e)
                {
                    System.out.println(e.toString());
                    returnValue = 1;
                }
                break;
            }

            // Si l'argument est le command code
            else if(sArgs[i].equals("-cc"))
            {
                // Si le command code est valide on le place dans l'objet
                if( (sArgs[i+1].equals("ON")) || (sArgs[i+1].equals("OFF"))
                        || (sArgs[i+1].equals("DIM"))
                        || (sArgs[i+1].equals("BRIGHT"))
                        || (sArgs[i+1].equals("ALL_ON"))
                        || (sArgs[i+1].equals("ALL_OFF"))
                        || (sArgs[i+1].equals("LAMPS_ON"))
                        || (sArgs[i+1].equals("LAMPS_OFF")) )
                {
                    dx10.setCommandCode(sArgs[i+1]);
                }
                // Si le choix n'est pas valide on retourne une erreur
                else
                {
                    returnValue = 1;
                }
                break;
            }

            // Si l'argument est celui des options
            else if(sArgs[i].equals("-o"))
            {
                dx10.setOptions(sArgs[i+1]);
                break;
            }

            // Si l'Argument est celui de l'ID
            else if(sArgs[i].equals("-i"))
            {
                try
                {
                    int iID = Integer.parseInt(sArgs[i+1]);
                    dx10.setID(iID);
                }
                // Si la string ne peut etre convertie en int
                catch(Exception e)
                {
                    System.out.println(e.toString());
                    returnValue = 1;
                }
                break;
            }

            // Si l'argument est celui du mot de passe
            else if(sArgs[i].equals("-p"))
            {
                dx10.setPassword(sArgs[i+1]);
                break;
            }

            // Si l'argument est celui de l'ip du serveur
            else if(sArgs[i].equals("-as"))
            {
                dx10.setIPAdressServer(sArgs[i+1]);
                break;
            }

            // Si l'argument est le port du serveur
            else if(sArgs[i].equals("-ps"))
            {
                try
                {
                    // Convertis la string in int
                    int iPort = Integer.parseInt(sArgs[i+1]);
                    // Si le port est valide on le place dans l'objet
                    if( (iPort >= 1) && (iPort <= 65535) )
                    {
                        dx10.setPortServer(iPort);
                    }
                    // Si le port n'est pas valide on retourne une erreur
                    else
                    {
                        returnValue = 1;
                    }
                }
                // Si la string ne peut etre convertie en int
                catch(Exception e)
                {
                    System.out.println(e.toString());
                    returnValue = 1;
                }
                break;
            }

            // Si l'argument est celui de l'ip du client
            else if(sArgs[i].equals("-ac"))
            {
                dx10.setIPAdressClient(sArgs[i+1]);
                break;
            }

            // Si l'argument est celui du port du client
            else if(sArgs[i].equals("-pc"))
            {
                try
                {
                    // Convertis la string in int
                    int iPort = Integer.parseInt(sArgs[i+1]);
                    // Si le port est valide on le place dans l'objet
                    if( (iPort >= 1) && (iPort <= 65535) )
                    {
                        dx10.setPortClient(iPort);
                    }
                    // Si le port n'est pas valide on retourne une erreur
                    else
                    {
                        returnValue = 1;
                    }
                }
                // Si la string ne peut etre convertie en int
                catch(Exception e)
                {
                    System.out.println(e.toString());
                    returnValue = 1;
                }
                break;
            }
        }
           
       
        if(dx10.getOptions() == null)
        {
            dx10.setOptions("");
        }
       
        return returnValue;
    }
   
    /* Méthode qui écrit la syntaxe à utiliser pour le mode ligne de commande
     */
    public static void printSyntax()
    {
        String sSyntax = "java ClientX10 [-u Utilitaire] [-hc House_Code] \n"
                + " [-kc Key_Code] [-cc Command_Code] [-o Options] [-i ID]\n"
                + " [-p Mot_Passe] [-as IP_Serveur] [-ps Port_Serveur]\n"
                + " [-ac IP_Client] [-pc Port_Client]";
       
        System.out.println("Syntaxe a utiliser:");
        System.out.println(sSyntax);
    }
    /* Méthode qui affiche le contenu d'un objet DataX10
    */
    public static void printDataX10(DataX10 dx10)
    {
        System.out.println("DataX10");
        System.out.println("-u = " + dx10.getUtilitaire());
        System.out.println("-hc = " + dx10.getHouseCode());
        System.out.println("-kc = " + dx10.getKeyCode());
        System.out.println("-cc = " + dx10.getCommandCode());
        System.out.println("-o = " + dx10.getOptions());
        System.out.println("-iID = " + dx10.getID());
        System.out.println("-p = " + dx10.getPassword());
        System.out.println("-as = " + dx10.getIPAdressServer());
        System.out.println("-ps = " + dx10.getPortServer());
        System.out.println("-ac = " + dx10.getIPAdressClient());
        System.out.println("-pc = " + dx10.getPortServer());
    }
   
   
}
TOP

Related Classes of ClientX10

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.