net.ranides.assira.events
Class EventRouterThread

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

public class EventRouterThread
extends EventRouterDispatcher

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

Author:
ranides

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

newInstance

public static EventRouterThread newInstance(String name,
                                            int size,
                                            long maxtime,
                                            EventJoiner joiner)
Tworzy nowy obiekt 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.

Parameters:
name - nazwa wątku, który będzie przetwarzał zdarzenia
size - maksymalny rozmiar wewnętrznej kolejki komunikatów
maxtime - maksymalny czas oczekiwania na miejsce w kolejce komunikatów
joiner - procedura implementująca mechanizm łączenia wielu zdarzeń w jedno
Returns:

newInstance

public static EventRouterThread newInstance(String name,
                                            int size,
                                            long maxtime)
Tworzy nowy obiekt EventRouter. Utworzony obiekt należy zniszczyć po użyciu za pomocą dispose().

Parameters:
name - nazwa wątku, w którym obsługiwane są zdarzenia
size - maksymalny rozmiar wewnętrznej kolejki komunikatów
maxtime - maksymalny czas oczekiwania na miejsce w kolejce komunikatów
Returns:

start

public EventRouterThread start()
Uruchamia EventRouter. Metoda nieblokująca.

Returns:
Throws:
IllegalThreadStateException - jeśli router jest już uruchomiony.

stop

public EventRouterThread stop()
Wyłącza EventRouter. Metoda blokująca - czeka, aż EventRouter poprawnie zwolni wszystkie zasoby.
thread-safe method

Returns:

join

public EventRouterThread join()
Metoda blokująca - czeka, aż event router zakończy swoje działanie.

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

Returns:

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
.

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

Specified by:
signalEvent in interface EventRouter
Overrides:
signalEvent in class EventRouterDispatcher
Parameters:
event -
Returns:
true - jeśli zdarzenie zostało zlecone do przekazania.

dispose

public void dispose()
Zleca wyłączenie i zwalnionenie zasobów routerowi. Nie czeka na zakończenie jego pracy.
thread-safe method

Specified by:
dispose in interface EventRouter
Overrides:
dispose in class EventRouterDispatcher


Copyright © 2013. All Rights Reserved.