3 import java.util.Vector;
5 public class MsgQueue {
7 public static MsgQueue Instance;
9 private Vector<Message> liste;
13 liste = new Vector<Message>();
16 public synchronized static MsgQueue Instance() {
17 if (Instance == null) {
18 Instance = new MsgQueue();
23 // retourne l'index d'un Message de meme tag
24 // retourne -1 si un tel Message existe pas
25 private synchronized int exist(int tag, String appli, int time) {
28 while ((existe == -1) && (index < liste.size())) {
29 if ((tag == ((Message) liste.get(index)).getTag())
30 && (appli.equals(((Message) liste.get(index)).getSender()
32 && (time == ((Message) liste.get(index)).getTimeStep())
42 // retourne l'index d'un Message de meme tag ET meme sender ke "msg"
43 // retourne -1 si un tel Message existe pas
44 private synchronized int exist(int sender, int tag, String appli, int time) {
47 while ((existe == -1) && (index < liste.size())) {
48 if ((tag == ((Message) liste.get(index)).getTag())
49 && (sender == ((Message) liste.get(index)).getSender()
51 && (appli.equals(((Message) liste.get(index)).getSender()
53 && (time == ((Message) liste.get(index)).getTimeStep())
63 // retourne l'index d'un Message de meme tag ET meme sender ke "msg"
64 // retourne -1 si un tel Message existe pas
65 private synchronized int exist(Message msg) {
68 while ((existe == -1) && (index < liste.size())) {
69 if ((msg.getTag() == ((Message) liste.get(index)).getTag()) // meme
71 && (msg.getSender().getRank() == ((Message) liste
72 .get(index)).getSender().getRank()) // meme tache
74 && ((msg.getSender().getAppliName()).equals(JaceSession
75 .Instance().getTaskObject().getId().getAppliName())) // meme
77 && (msg.getTimeStep() == JaceSession.Instance()
78 .getTaskObject().getTimeStep())) { // meme timeStep
92 // ajoute un msg ds file
93 public synchronized void add(Message msg) {
97 // si existe deja 1 Message de meme tag ET meme envoyeur, on l'ecrase
100 liste.setElementAt(msg, is);
103 // si existe pas de Message de meme tag ET meme envoyeur, on l'ajoute
108 // ensuite on reveille le thread de calcul en attente eventuelle sur le
111 * try { //notifyAll(); } catch(Exception e){};
115 // retourne Message de tag "tag"
116 public synchronized Message get(int id, int tag) {
118 if (liste.isEmpty()) {
121 // System.out.println("chercher "+tag+"---"+id);
122 is = exist(id, tag, JaceSession.Instance().getTaskObject().getId()
123 .getAppliName(), JaceSession.Instance().getTaskObject()
126 // System.out.println("exitse ds la FA");
127 Message tmp = (Message) liste.get(is);
129 // System.out.println(tmp);
130 // System.out.println("MSGQUEUE : j'ai recup " + tmp +
131 // " de tag " + tmp.getTag() + " de " +
132 // tmp.getSender().getHostIP());
135 // System.out.println("existe pas :(((( "+tag+"---"+id);
141 public synchronized Message get(int tag) {
143 // System.out.println("//////////kk viens de chercher un message");
144 if (liste.isEmpty()) {
147 is = exist(tag, JaceSession.Instance().getTaskObject().getId()
148 .getAppliName(), JaceSession.Instance().getTaskObject()
151 Message tmp = (Message) liste.get(is);
153 // System.out.println("MSGQUEUE : j'ai recup " + tmp +
154 // " de tag " + tmp.getTag() + " de " +
155 // tmp.getSender().getHostIP());
162 // les reception bloquantes
164 * public synchronized Message getBl(int id) { int is = -1; //
165 * System.out.println("Taille de la file: "+liste.size()); if
166 * (liste.isEmpty()) { try { wait(); } catch(Exception e){};} while ((is =
168 * (id,JaceSession.Instance().getTaskObject().getId().getAppliName(),JaceSession
169 * .Instance().getTaskObject().getTimeStep())) == -1){ try{ wait(); }
170 * catch(Exception e){}; try { //notifyAll(); } catch(Exception e){}; }
171 * Message tmp; tmp = (Message)liste.get(is); liste.remove(is);
172 * //System.out.println("MSGQUEUE : j'ai recup " + tmp + " de tag " +
173 * tmp.getTag() + " de " + tmp.getSender().getHostIP()); //
174 * System.out.println("Taille de la file: "+liste.size()); return tmp; }
176 * public synchronized Message getBlTag(int id) { int is = -1; //
177 * System.out.println("Taille de la file: "+liste.size()); if
178 * (liste.isEmpty()) { try { wait(); } catch(Exception e){}; }
181 * exist(id,JaceSession.Instance().getTaskObject().getId().getAppliName
182 * (),JaceSession.Instance().getTaskObject().getTimeStep())) == -1) { try{
183 * wait(); } catch(Exception e){}; try { //notifyAll(); } catch(Exception
184 * e){}; } Message tmp; tmp = (Message)liste.get(is); liste.remove(is);
185 * //System.out.println("MSGQUEUE : j'ai recup " + tmp + " de tag " +
186 * tmp.getTag() + " de " + tmp.getSender().getHostIP()); //
187 * System.out.println("Taille de la file: "+liste.size()); return tmp; }
189 * public synchronized Message getBl(int id,int tag) { int is = -1;
190 * //System.out.println("je cherche "+id+" "+tag);
191 * //System.out.println("Taille de la file: "+liste.size()); if
192 * (liste.isEmpty()) { try { wait(); }catch(Exception e){}; } while ((is =
194 * (id,tag,JaceSession.Instance().getTaskObject().getId().getAppliName()
195 * ,JaceSession.Instance().getTaskObject().getTimeStep())) == -1) { try {
196 * wait(); } catch(Exception e){}; try { //notifyAll(); } catch(Exception
197 * e){}; } Message tmp; tmp = (Message)liste.get(is); liste.remove(is);
198 * //System.out.println("MSGQUEUE : j'ai recup " + tmp + " de tag " +
199 * tmp.getTag() + " de " + tmp.getSender().getHostIP()); return tmp; }
202 public synchronized int getSize() {