net.ranides.assira.events
Class EventRouterDispatcher

java.lang.Object
  extended by net.ranides.assira.events.EventRouterDispatcher
All Implemented Interfaces:
EventListener<Event>, EventRouter
Direct Known Subclasses:
AbstractConfiguration, EventRouterThread

public class EventRouterDispatcher
extends Object
implements EventRouter

Beznarzutowy EventRouter, nie kolejkuje zdarzeń. Wywołuje procedury obsługi natychmiast po wywołaniu zdarzenia, w wątku, który zasygnalizował event.

Użyteczny wszędzie tam, gdzie mamy pewność, że nadawcy i odbiorcy działają w jednym wątku, albo wtedy, gdy rejestrowani obserwatorzy zdarzeń realizują obsługę komunikatów w taki sposób, że mogą ruszyć w dowolnym wątku (bo wykonują operacje thread-safe, albo używają innych metod synchronizacji).

Author:
ranides

Constructor Summary
EventRouterDispatcher()
           
 
Method Summary
<T extends Event>
void
addEventListener(Class<T> event, EventListener<? super T> listener)
          Rejestruje obserwatora, który otrzyma wszystkie zdarzenia o podanym typie.
 void dispose()
          Kończy działanie routera i zwalnia wszystkie zasoby.
 Collection<EventBinding<?>> getEventListeners()
           
 void handleEvent(Event event)
          Rozsyła otrzymany komunikat do wszystkich obserwatorów, delegując obsługę zdarzenia do metody signalEvent(net.ranides.assira.events.Event) thread-safe method
 void removeAllEventListeners()
          Usuwa wszystkie zarejestrowane obserwatory.
<T extends Event>
void
removeEventListener(Class<T> event, EventListener<? super T> listener)
          Usuwa obserwatora, którego wcześniej zarejestrowano dla zdarzeń o podanym typie.
 boolean signalEvent(Event event)
          Sygnalizuje podane zdarzenie rozsyłając komunikat do wszystkich obserwatorów.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

EventRouterDispatcher

public EventRouterDispatcher()
Method Detail

addEventListener

public <T extends Event> void addEventListener(Class<T> event,
                                               EventListener<? super T> listener)
Description copied from interface: EventRouter
Rejestruje obserwatora, który otrzyma wszystkie zdarzenia o podanym typie.
thread-safe method

Specified by:
addEventListener in interface EventRouter

removeEventListener

public <T extends Event> void removeEventListener(Class<T> event,
                                                  EventListener<? super T> listener)
Description copied from interface: EventRouter
Usuwa obserwatora, którego wcześniej zarejestrowano dla zdarzeń o podanym typie. Jeśli zajestrowano go również dla zdarzeń o innych typach - zostają one nadal. Jeśli zarejestrowano go wielokrotnie - musi zostać usunięty również wielokrotnie.
thread-safe method

Specified by:
removeEventListener in interface EventRouter

removeAllEventListeners

public void removeAllEventListeners()
Description copied from interface: EventRouter
Usuwa wszystkie zarejestrowane obserwatory.
thread-safe method

Specified by:
removeAllEventListeners in interface EventRouter

getEventListeners

public Collection<EventBinding<?>> getEventListeners()
Specified by:
getEventListeners in interface EventRouter

signalEvent

public boolean signalEvent(Event event)
Sygnalizuje podane zdarzenie rozsyłając komunikat do wszystkich obserwatorów. Jeśli rozesłanie komunikatu nie jest możliwe, zwraca false.

Metoda czeka na obsłużenie komunikatu przez wszystkich zarejestrowanych obserwatorów. Obsługa komunikatu jest uruchamiana natychmiastowo, w bieżącym wątku (t.j. w tym samym, który zasygnalizował zdarzenie).

Interesującym przypadkiem jest przekazanie Dispatcher'owi obserwatora, który jest EventRouterThread'em. Taki obserwator w bieżącym wątku obsłuży zdarzenie w swoim imieniu, ale ta obsługa, to nic więcej, niż zapis do wewnętrznej kolejki. Dokładniej, zgodnie z dokumentacją:

thread-safe method

Specified by:
signalEvent in interface EventRouter
Parameters:
event -
Returns:
true - jeśli zdarzenie może być przekazane odbiorcom.

handleEvent

public void handleEvent(Event event)
Rozsyła otrzymany komunikat do wszystkich obserwatorów, delegując obsługę zdarzenia do metody signalEvent(net.ranides.assira.events.Event)
thread-safe method

Specified by:
handleEvent in interface EventListener<Event>
Parameters:
event -

dispose

public void dispose()
Description copied from interface: EventRouter
Kończy działanie routera i zwalnia wszystkie zasoby.
thread-safe method

Specified by:
dispose in interface EventRouter


Copyright © 2013. All Rights Reserved.