Question on Events

Richard Achmatowicz <[email protected]> Wed, 06 Aug 2008 13:09:36 -0400
Newsgroups gmane.comp.java.smartfrog.devel
Message-ID <[email protected]>
Hello

A question on the use of events in the SF workflow. Suppose I have a 
configuration of components which looks like this:
c1 extends Parallel {
  p1 extends ... {...}
  }
  c2 extends Parallel {
    p2 extends ... {...}
    p3 extends ... {...}
  }
}
sfConfig extends c1 ;

Here are some of the things I would like to do with events:
(i) send an event from p1 to p3 only
(ii) send an event from p1 to all other leaf components {p2, p3}
(iii) send an event from p1 to all components {c1, c2, p2, p3}

I know I can send an event from a component using a sub-component 
EventSend. I know I can handle an event using a subcomponent OnEvent. 
For example, the following code allows me to send an event from p1 to p3 
(I added in a delay before sending to that the OnEvent components have a 
chance to start):

c1 extends Parallel {
    p1 extends Sequence {
      // set up a delay to allow event handler to initialise
      delay extends DoNothing {
        time 2000 ;
      }
      // send an event to p3
      sender extends EventSend {
        sendTo: fred LAZY ATTRIB c2:p3 ;
        event "apache" ;
      }
    }

    c2 extends Parallel {
      p2 extends OnEvent {
        singleEvent false ;
        // event handlers
        otherwise extends LAZY DoNothing {
          time 1000 ;
            message "hello from p2:otherwise" ;
        }
      }

      p3 extends OnEvent {
        singleEvent false ;
        // event handlers
        apache extends LAZY DoNothing {
          time 1000 ;
          message "hello from Apache" ;
        }
        otherwise extends LAZY DoNothing {
          time 1000 ;
          message "hello from p3:otherwise" ;
        }
      }
    }
}
sfConfig extends c1 ;

One thing i'm not clear on is the use of registerWith. It appears that 
even if I don't make use of registerWith in this example, the events 
manage to reach their destinations (specified with sentTo). I also tried 
to send an event to p2 and p3 by sending it to c2, but that didn't work.

Are there ways to make use of registerWith in order to implement the use 
cases (ii) and (iii)?

Richard





-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/