|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectnet.ranides.assira.events.EventRouterDispatcher
net.ranides.assira.events.EventRouterThread
public class EventRouterThread
EventRouter kolejkujący zdarzenia. Wywołuje procedury obsługi w bliżej nieokreślonym czasie po zasygnalizowaniu zdarzenia.
Procedury obsługi zdarzenia zarejestrowanych obserwatorów są wywoływane
w oddzielnym wątku, zarządzanym przez EventRouter. Należy mieć to na
uwadze, ponieważ jest to zupełnie inny wątek, niż ten, który zarejestrował obserwatora,
albo który zasygnalizował event.
| thread-safe class |
| Nested Class Summary | |
|---|---|
static class |
EventRouterThread.ExitEvent
Zdarzenie, które może zostać wysłane do routera, w celu zakończenia jego pracy. |
class |
EventRouterThread.InterruptEvent
Zdarzenie wysyłane do wszystkich zainteresowanych obserwatorów routera. |
static class |
EventRouterThread.ShutdownEvent
Zdarzenie wysyłane do wszystkich zainteresowanych obserwatorów routera. |
| Method Summary | |
|---|---|
void |
dispose()
Zleca wyłączenie i zwalnionenie zasobów routerowi. |
EventRouterThread |
join()
Metoda blokująca - czeka, aż event router zakończy swoje działanie. |
static EventRouterThread |
newInstance(String name,
int size,
long maxtime)
Tworzy nowy obiekt EventRouter. |
static EventRouterThread |
newInstance(String name,
int size,
long maxtime,
EventJoiner joiner)
Tworzy nowy obiekt EventRouter. |
boolean |
signalEvent(Event event)
Sygnalizuje podane zdarzenie rozsyłając komunikat do wszystkich obserwatorów. |
EventRouterThread |
start()
Uruchamia EventRouter. |
EventRouterThread |
stop()
Wyłącza EventRouter. |
| Methods inherited from class net.ranides.assira.events.EventRouterDispatcher |
|---|
addEventListener, getEventListeners, handleEvent, removeAllEventListeners, removeEventListener |
| Methods inherited from class java.lang.Object |
|---|
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Method Detail |
|---|
public static EventRouterThread newInstance(String name,
int size,
long maxtime,
EventJoiner joiner)
EventRouter. Utworzony obiekt należy zniszczyć po użyciu za pomocą
dispose().
Utworzony obiekt EventRouter obsługuje mechanizm złączania zdarzeń
w oparciu o strategię realizowaną przez EventJoiner przekazany jako
argument.
name - nazwa wątku, który będzie przetwarzał zdarzeniasize - maksymalny rozmiar wewnętrznej kolejki komunikatówmaxtime - maksymalny czas oczekiwania na miejsce w kolejce komunikatówjoiner - procedura implementująca mechanizm łączenia wielu zdarzeń w jedno
public static EventRouterThread newInstance(String name,
int size,
long maxtime)
EventRouter. Utworzony obiekt należy zniszczyć po użyciu za pomocą
dispose().
name - nazwa wątku, w którym obsługiwane są zdarzeniasize - maksymalny rozmiar wewnętrznej kolejki komunikatówmaxtime - maksymalny czas oczekiwania na miejsce w kolejce komunikatów
public EventRouterThread start()
EventRouter. Metoda nieblokująca.
IllegalThreadStateException - jeśli router jest już uruchomiony.public EventRouterThread stop()
EventRouter. Metoda blokująca - czeka, aż EventRouter
poprawnie zwolni wszystkie zasoby.
| thread-safe method |
public EventRouterThread join()
Uwaga! Żeby metoda kiedykolwiek się zakończyła, w aplikacji musi istnieć
co najmniej jeden dodatkowy wątek, który wyśle do routera EventRouterThread.ExitEvent
lub wywoła metodę stop().
| thread-safe method |
public boolean signalEvent(Event event)
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ą:
EventRouterDispatcher.handleEvent(net.ranides.assira.events.Event)signalEvent(net.ranides.assira.events.Event)signalEvent wstawi komunikat do kolejki zdarzeń oczekujących| thread-safe method |
Wstawia jedynie zdarzenie do kolejki komunikatów.
Jeśli kolejka jest w całości wypełniona, tzn osiągnęłą swoją maksymalną pojemność,
to czeka na zwolnienie w niej miejsca przez maksymalny dopuszczalny czas.
Obie wartości (rozmiar kolejki, długość czekania) są definiowane podczas
konstrukcji routera. Jeśli w kolejce nadal nie ma miejsca - to kończy działanie
zwracając false.
Metoda nie czeka na obsłużenie komunikatu przez zarejestrowanych obserwatorów. Obsługa komunikatu jest uruchamiana w oddzielnym wątku zarządzanym przez router.
| thread-safe method |
signalEvent in interface EventRoutersignalEvent in class EventRouterDispatcherevent -
public void dispose()
| thread-safe method |
dispose in interface EventRouterdispose in class EventRouterDispatcher
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||