IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Socket et protocole


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Par défaut Socket et protocole
    Bonjour,

    Pour mes applications en réseaux, du côté client, j'ai souvent une thread qui écoute les messages du serveur et ensuite je fait plein plein de if, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    while(true)
    {
    	String msg = socket.recoitMessage();
    	if(msg.equals("connecter")
    	{
    		//...
    	}else if(msg.equals("deconnecte")
    	{
    		//....
    	}else if(msg.equals("commence")
    	{
    		//....
    	}else if(msg.equals("fini")
    	{
    		//....
    	} //etc....
    }
    Bref.... du code super beau
    N'y a t-il pas une solution pour rendre cela encore plus beau ?

    Merci d'avance...

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    À ce niveau là moi je n'ai rien trouvé de mieux non plus

  3. #3
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Bonjour,

    Une possibilité serait de définir une interface et une classe par réponse. Puis de "collectionner" les réponses dans un objet Map.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    /* Contexte d'une action*/
    class Context {
    }
     
    /* Definition interface d'une réponse */
    interface Response {
      void process(Context ctxt);
    }
     
    /* Implementation des réponses de chaque action */
    class Connecter implements Response {
      void process(Context ctxt) {
      }
    }
     
    class Deconnecter implements Response {
      void process(Context ctxt) {
      }
    }
     
    class Commencer implements Response {
     {
      void process(Context ctxt) {
      }
    }
     
    class Finir implements Response {
      void process(Context ctxt) {
      }
    }
     
     
    /* */
    class Processing {
      public static final String ACTION_CONNECTER = "connecter";
      public static final String ACTION_DECONNECTER = "deconnecter";
      public static final String ACTION_COMMENCER = "commencer";
      public static final String ACTION_FINIR = "finir";
     
      Map actions = new HashMap();
     
      public Processing() {
        /* On instancie chaque réponse */
        actions.put(ACTION_CONNECTER, new Connecter());
        actions.put(ACTION_DECONNECTER, new DeConnecter());
        actions.put(ACTION_COMMENCER, new Commencer());
        actions.put(ACTION_FINIR, new Finir());
      }
     
      /* On traite les actions */
      public process() {
        Context ctxt = new Context(ctxt);
     
        while (true) {
          String msg = socket.recoitMessage();
          Response response = (Response)actions.get(msg);
          if (response != null) {
            response.process(ctxt);
          }
        }
      }
    J'en conviens que c'est un peu lourd... Mais il se peut qu'il existe un pattern pour ce problème.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Par défaut
    Merci pour vos réponses,

    Je trouve l'idée assez bonne. Si quelqu'un à quelque chose de moins lourd, je suis preneur...

  5. #5
    Membre éclairé
    Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2002
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 89
    Par défaut
    pour faire du "beau" il y a mina d'apache
    http://mina.apache.org/

    Ton "connecter", "deconnecte", .. c'est l'état de la session TCP?
    Parce que si oui le "state pattern" pourrait être utile
    design pattern (en anglais)
    http://www.vincehuston.org/dp/state.html

    diagrame de classe:
    Nom : tcp-state.gif
Affichages : 59
Taille : 6,9 Ko

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Par défaut
    Merci, je vais regarder ton lien, je ne connait pas dutout.

    Pour ce qui est du "connecter", "deconnecter", je ne sais pas ce que ça représente S'était juste un exemple comme ça inventé en 5 sec

Discussions similaires

  1. Réponses: 43
    Dernier message: 17/01/2014, 23h07
  2. Réponses: 0
    Dernier message: 06/10/2011, 21h41
  3. Socket et protocole IRC
    Par EpOnYmE187 dans le forum WinDev
    Réponses: 8
    Dernier message: 10/02/2006, 14h54
  4. raw socket et protocole TCP/IP
    Par robertmouac dans le forum Développement
    Réponses: 3
    Dernier message: 09/03/2005, 23h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo