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;
  +
                }
                
        }                                                                       
  
  
  

Reply via email to