Class EventManager<T>
java.lang.Object
de.bsvrz.dav.daf.main.impl.notification.EventManager<T>
public class EventManager<T>
extends java.lang.Object
Diese Klasse verwaltet eine Menge von Event-Listenern von Typ T, bei denen zwischen internen und öffentlichen/asynchronen Listenern unterschieden
wird. Wenn ein Ereignis ausgelöst wird, werden interne Listener im selben Thread ausgelöst der mit
postEvent(Consumer)
die
Benachrichtigung auslöst. Asynchrone EventListener werden im DafMainEventThread
asynchron benachrichtigt, sodass der auslösende Thread
nicht blockiert werden kann.
- Interne Eventlistener sollten keine blockierenden Aktionen durchführen.
- Externe Eventlistener werden u. U. erst verzögert ausgelöst, blockieren aber nicht die ausführung von internen Benachrichtungen. Sie blockieren sich aber ggf. gegenseitig.
-
Constructor Summary
Constructors Constructor Description EventManager()
Erstellt einen neuen EventManager ohne eigenen Dispatch-Thread.EventManager(DafMainEventThread notificationThread)
Erstellt einen neuen EventManager mit Dispatch-Thread. -
Method Summary
Modifier and Type Method Description void
addAsyncNotificationListener(T listener)
Fügt einen Listener hinzu, der die Event-Benachrichtigung asynchron erhält.void
addInternalNotificationListener(T listener)
Fügt einen Listener hinzu, der die Event-Benachrichtigung synchron erhält.boolean
isEmpty()
Gibttrue
zurück, wenn es keine EventListener gibt.void
postEvent(java.util.function.Consumer<T> eventGenerator)
Veröffentlicht ein Ereignis.boolean
removeAsyncNotificationListener(T listener)
Entfernt einen asynchronen Listener.boolean
removeInternalNotificationListener(T listener)
Entfernt einen synchronen Listener.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Constructor Details
-
EventManager
public EventManager()Erstellt einen neuen EventManager ohne eigenen Dispatch-Thread. Asnychrone Events werden dann gff. jedesmal in einem neuen Thread publiziert. -
EventManager
Erstellt einen neuen EventManager mit Dispatch-Thread.- Parameters:
notificationThread
- Event-Thread
-
-
Method Details
-
addAsyncNotificationListener
Fügt einen Listener hinzu, der die Event-Benachrichtigung asynchron erhält.- Parameters:
listener
- Listener
-
removeAsyncNotificationListener
Entfernt einen asynchronen Listener.- Parameters:
listener
- zu entfernender Listener- Returns:
true
wenn entfernt,false
falls nicht vorhanden.
-
addInternalNotificationListener
Fügt einen Listener hinzu, der die Event-Benachrichtigung synchron erhält.- Parameters:
listener
- Listener
-
removeInternalNotificationListener
Entfernt einen synchronen Listener.- Parameters:
listener
- zu entfernender Listener- Returns:
true
wenn entfernt,false
falls nicht vorhanden.
-
postEvent
Veröffentlicht ein Ereignis. Als Parameter wird ein Lambda übergeben, der auf einem Listener von Typ T das Ereignis auslöst.Diese Methode veröffentlicht zuerst das Ereignis auf den internen Listenern im selben Thread und dann auf den externen Listenern im notificationThread.
- Parameters:
eventGenerator
- Ereignis-Generator
-
isEmpty
public boolean isEmpty()Gibttrue
zurück, wenn es keine EventListener gibt.- Returns:
true
, wenn es keine EventListener gibt, sonstfalse
-