3 import java.util.ArrayList;
6 public class MsgQueue {
8 public static MsgQueue Instance;
10 private ArrayList<Message> liste;
14 liste = new ArrayList<Message>();
17 public synchronized static MsgQueue Instance() {
18 if (Instance == null) {
19 Instance = new MsgQueue();
24 // retourne l'index d'un Message de meme tag
25 // retourne -1 si un tel Message existe pas
26 private synchronized int exist(int tag, String appli, int time) {
29 while ((existe == -1) && (index < liste.size())) {
30 if ((tag == ((Message) liste.get(index)).getTag())
31 && (appli.equals(((Message) liste.get(index)).getSender()
33 && (time == ((Message) liste.get(index)).getTimeStep())
43 // retourne l'index d'un Message de meme tag ET meme sender ke "msg"
44 // retourne -1 si un tel Message existe pas
45 private synchronized int exist(int sender, int tag, String appli, int time) {
48 while ((existe == -1) && (index < liste.size())) {
49 if ((tag == ((Message) liste.get(index)).getTag())
50 && (sender == ((Message) liste.get(index)).getSender()
52 && (appli.equals(((Message) liste.get(index)).getSender()
54 && (time == ((Message) liste.get(index)).getTimeStep())
64 // retourne l'index d'un Message de meme tag ET meme sender ke "msg"
65 // retourne -1 si un tel Message existe pas
66 private synchronized int exist(Message msg) {
69 while ((existe == -1) && (index < liste.size())) {
70 if ((msg.getTag() == ((Message) liste.get(index)).getTag()) // meme
72 && (msg.getSender().getRank() == ((Message) liste
73 .get(index)).getSender().getRank()) // meme tache
75 && ((msg.getSender().getAppliName()).equals(JaceSession
76 .Instance().getTaskObject().getId().getAppliName())) // meme
78 && (msg.getTimeStep() == JaceSession.Instance()
79 .getTaskObject().getTimeStep())) { // meme timeStep
93 // ajoute un msg ds file
94 public synchronized void add(Message msg) {
98 // si existe deja 1 Message de meme tag ET meme envoyeur, on l'ecrase
101 liste.set( is, msg ) ;
104 // si existe pas de Message de meme tag ET meme envoyeur, on l'ajoute
109 // ensuite on reveille le thread de calcul en attente eventuelle sur le
112 * try { //notifyAll(); } catch(Exception e){};
116 // retourne Message de tag "tag"
117 public synchronized Message get(int id, int tag) {
119 if (liste.isEmpty()) {
122 // System.out.println("chercher "+tag+"---"+id);
123 is = exist(id, tag, JaceSession.Instance().getTaskObject().getId()
124 .getAppliName(), JaceSession.Instance().getTaskObject()
127 // System.out.println("exitse ds la FA");
128 Message tmp = (Message) liste.get(is);
130 // System.out.println(tmp);
131 // System.out.println("MSGQUEUE : j'ai recup " + tmp +
132 // " de tag " + tmp.getTag() + " de " +
133 // tmp.getSender().getHostIP());
136 // System.out.println("existe pas :(((( "+tag+"---"+id);
142 public synchronized Message get(int tag) {
144 // System.out.println("//////////kk viens de chercher un message");
145 if (liste.isEmpty()) {
148 is = exist(tag, JaceSession.Instance().getTaskObject().getId()
149 .getAppliName(), JaceSession.Instance().getTaskObject()
152 Message tmp = (Message) liste.get(is);
154 // System.out.println("MSGQUEUE : j'ai recup " + tmp +
155 // " de tag " + tmp.getTag() + " de " +
156 // tmp.getSender().getHostIP());
163 // les reception bloquantes
165 * public synchronized Message getBl(int id) { int is = -1; //
166 * System.out.println("Taille de la file: "+liste.size()); if
167 * (liste.isEmpty()) { try { wait(); } catch(Exception e){};} while ((is =
169 * (id,JaceSession.Instance().getTaskObject().getId().getAppliName(),JaceSession
170 * .Instance().getTaskObject().getTimeStep())) == -1){ try{ wait(); }
171 * catch(Exception e){}; try { //notifyAll(); } catch(Exception e){}; }
172 * Message tmp; tmp = (Message)liste.get(is); liste.remove(is);
173 * //System.out.println("MSGQUEUE : j'ai recup " + tmp + " de tag " +
174 * tmp.getTag() + " de " + tmp.getSender().getHostIP()); //
175 * System.out.println("Taille de la file: "+liste.size()); return tmp; }
177 * public synchronized Message getBlTag(int id) { int is = -1; //
178 * System.out.println("Taille de la file: "+liste.size()); if
179 * (liste.isEmpty()) { try { wait(); } catch(Exception e){}; }
182 * exist(id,JaceSession.Instance().getTaskObject().getId().getAppliName
183 * (),JaceSession.Instance().getTaskObject().getTimeStep())) == -1) { try{
184 * wait(); } catch(Exception e){}; try { //notifyAll(); } catch(Exception
185 * e){}; } Message tmp; tmp = (Message)liste.get(is); liste.remove(is);
186 * //System.out.println("MSGQUEUE : j'ai recup " + tmp + " de tag " +
187 * tmp.getTag() + " de " + tmp.getSender().getHostIP()); //
188 * System.out.println("Taille de la file: "+liste.size()); return tmp; }
190 * public synchronized Message getBl(int id,int tag) { int is = -1;
191 * //System.out.println("je cherche "+id+" "+tag);
192 * //System.out.println("Taille de la file: "+liste.size()); if
193 * (liste.isEmpty()) { try { wait(); }catch(Exception e){}; } while ((is =
195 * (id,tag,JaceSession.Instance().getTaskObject().getId().getAppliName()
196 * ,JaceSession.Instance().getTaskObject().getTimeStep())) == -1) { try {
197 * wait(); } catch(Exception e){}; try { //notifyAll(); } catch(Exception
198 * e){}; } Message tmp; tmp = (Message)liste.get(is); liste.remove(is);
199 * //System.out.println("MSGQUEUE : j'ai recup " + tmp + " de tag " +
200 * tmp.getTag() + " de " + tmp.getSender().getHostIP()); return tmp; }
203 public synchronized int getSize() {