User: norbert
Date: 00/06/01 13:11:48
Modified: src/java/org/spydermq SessionQueue.java
Log:
Debug : Add the RemoteControl object
Revision Changes Path
1.3 +36 -24 spyderMQ/src/java/org/spydermq/SessionQueue.java
Index: SessionQueue.java
===================================================================
RCS file: /products/cvs/ejboss/spyderMQ/src/java/org/spydermq/SessionQueue.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SessionQueue.java 2000/06/01 01:14:29 1.2
+++ SessionQueue.java 2000/06/01 20:11:48 1.3
@@ -21,7 +21,7 @@
*
* @author Norbert Lataille ([EMAIL PROTECTED])
*
- * @version $Revision: 1.2 $
+ * @version $Revision: 1.3 $
*/
public class SessionQueue
{
@@ -181,31 +181,43 @@
{
Log.log("SessionQueue:
dispatchMessage(Destination="+dest.toString()+",Mes="+mes.toString()+")");
- if (session.closed) throw new NoReceiverException("The session is
closed");
- if (NumListeningSubscribers==0) throw new NoReceiverException("There
are no receivers for this destination !");
- if (mes.isOutdated()) return;
-
- Iterator i=subscribers.iterator();
- SpyQueueReceiver receiver=null;
- while (i.hasNext()) {
- receiver=(SpyQueueReceiver)i.next();
- if (receiver.listening) break;
- }
- if (receiver==null||!receiver.listening) {
- Log.error("FIXME: The listeners count was invalid !");
- throw new NoReceiverException("The listeners count was invalid
!");
- }
+ while (true) {
- synchronized (receiver.messages) {
-
- if (receiver.messageListener==null) {
- if (!receiver.waitInReceive) throw new
NoReceiverException("The receiver is not waiting for a message !"); //Try someone else
in the same session
- receiver.addMessage(mes);
- receiver.messages.notify();
- } else {
- receiver.messageListener.onMessage(mes);
+ if (session.closed) throw new NoReceiverException("The session
is closed");
+ if (session.modeStop) throw new NoReceiverException("The
session is stopped");
+ if (NumListeningSubscribers==0) throw new
NoReceiverException("There are no receivers for this destination !");
+ if (mes.isOutdated()) return;
+
+ //We should use a linked list of all Receivers (enable
synchronization)
+ Iterator i=subscribers.iterator();
+ SpyQueueReceiver receiver=null;
+ while (i.hasNext()) {
+ receiver=(SpyQueueReceiver)i.next();
+ if (receiver.listening) break;
+ }
+ if (receiver==null||!receiver.listening) {
+ Log.error("FIXME: The listeners count was invalid !");
+ throw new NoReceiverException("The listeners count was
invalid !");
}
-
+
+ synchronized (receiver.messages) {
+
+ if (receiver.messageListener==null) {
+ if (!receiver.waitInReceive) {
+ Log.notice("The receiver was not
waiting for a message !");
+ receiver.listening=false;
+ NumListeningSubscribers--;
+ continue;
+ }
+ receiver.addMessage(mes);
+ receiver.messages.notify();
+ } else {
+ receiver.messageListener.onMessage(mes);
+ }
+ }
+
+ break;
+
}
}