Bonjour,
Je pense que la question a déjà été posée de nombreuses fois, mais je n'ai pas trouvé mon bonheur en faisant des recherches.
Le contexte :
J'ai un serveur (proxy HTTP) qui sert de passerelle de dialogue entre un téléphone (android) et un logiciel PC
Ce serveur est découpé en 2 threads : un qui communiquera avec le téléphone, et l'autre avec le logiciel.
La cinématique est la suivante :
Le logiciel envoie un message au serveur (via son Thread associé, nommé "ThreadLogiciel"), ce Thread va transmettre le message au Thread associé au téléphone nommé "ThreadPhone", et ce dernier va enfin transmettre le message au téléphone.
Mon soucis est simplement que je ne sais pas comment faire pour faire passer le message de mon 1er Thread à mon 2nd.
Pour les codes ci-dessous, inutile de dire que j'ai simplifié pour le topic, toutes les références y sont etc...
A noter aussi que je ne dois pas changer ma cinématique expliqué ci-dessus
Classe qui lance les Threads :
1er Thread:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public class ThreadClient { if (condition1) { new ThreadLogiciel(server, socket); } else if (condition2) { new ThreadPhone(server, socket); } }
2eme Thread:
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 public class ThreadLogiciel implements Runnable { String msgFromClientPart = ""; // Contiendra les différentes parties du message String msgFromClientFull = ""; // Message final // Constructeurs etc... try { while ((msgFromClientPart = bufferedReader.readLine()) != null) { if (condition){ threadPhone.setMsgFromThreadLogiciel("blabllabbla"); } // Autre traitement } catch (Exception e) { LOG.error("ERREUR - Exception - Erreur dans la lecture du message : " + e); isMsgReceived = false; } }
Dans ce cas, j'essaie une variable globale "msgFromThreadLogiciel" dans mon ThreadPhone, et en faisant un "setMsgFromThreadLogiciel" depuis ThreadLogiciel, mais j'ai l'impression que mon ThreadPhone ne réagis pas ...
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 public class ThreadPhone implements Runnable { String msgFromClientPart = ""; // Contiendra les différentes parties du message String msgFromClientFull = ""; // Message final // Constructeurs etc... try { while ((msgFromClientPart = bufferedReader.readLine()) != null) { if (msgFromThreadLogiciel!= null && !msgFromThreadLogiciel.isEmpty()){ // Lire le message venant du ThreadLogiciel; } // Autre traitement } catch (Exception e) { LOG.error("ERREUR - Exception - Erreur dans la lecture du message : " + e); isMsgReceived = false; } }
Quelqu'un aurait il des idées? J'ai vaguement entendu parlé des Pipe, des "BlockingQueue" mais je n'ai pas réussi à le faire fonctionner ...
Merci d'avance![]()
Partager