java.lang.Object
xyz.cofe.ecolls.ListenersHelper<ListenerType,EventType>
- Type Parameters:
ListenerType- Тип издательяEventType- Тип подписчика
- All Implemented Interfaces:
GetReadLock,GetWriteLock,ReadWriteLockProperty,ReadWriteLockSupport
public class ListenersHelper<ListenerType,EventType> extends java.lang.Object implements ReadWriteLockSupport, ReadWriteLockProperty
Помошник в реализации Listener.
Обеспечивает синхронность при вызове методов:
Обеспечивает синхронность при вызове методов:
- getListeners
- addListener
- removeListener
- fireEvent
- Author:
- Kamnev Georgiy (nt.gocha@gmail.com)
-
Field Summary
Fields Modifier and Type Field Description protected java.util.function.BiConsumer<ListenerType,EventType>callListenerФункция вызывающая listener.method( collectionEvent );protected java.util.concurrent.atomic.AtomicIntegereventBlockLevelprotected java.util.HashSet<ListenerType>listenersHard ссылки на подписчиковprotected java.util.WeakHashMap<ListenerType,java.lang.Object>weakListenersSoft/Weak ссылки на подписчиков -
Constructor Summary
Constructors Constructor Description ListenersHelper(java.util.function.BiConsumer<ListenerType,EventType> callListFunc)Конструктор.ListenersHelper(java.util.function.BiConsumer<ListenerType,EventType> callListFunc, java.util.concurrent.locks.ReadWriteLock rwLocks)Конструктор. -
Method Summary
Modifier and Type Method Description voidaddEvent(EventType ev)Добавляет событие в очередьjava.lang.AutoCloseableaddListener(ListenerType listener)Добавление подписчика.java.lang.AutoCloseableaddListener(ListenerType listener, boolean weakLink)Добавление подписчика.voidfireEvent(EventType event)Рассылка уведомления подписчикамstatic <LS, EV> ListenersHelper<LS,EV>get(java.lang.Class cls, java.lang.Object inst, java.util.function.BiConsumer<LS,EV> invoker)Поддержка в реализации подписчиков на событияjava.util.concurrent.ConcurrentLinkedQueue<EventType>getEventQueue()Очередь событийjava.util.Set<ListenerType>getListeners()Получение списка подписчиковjava.util.concurrent.locks.LockgetReadLock()Возвращает блокировку чтенияjava.util.concurrent.locks.LockgetWriteLock()Возвращает блокировку записиbooleanhasListener(ListenerType listener)Проверка наличия подписчика в списке обработкиvoidremoveAllListeners()voidremoveListener(ListenerType listener)Удаление подписчика из списка обработкиvoidrunEventQueue()Отправляет события из очереди подписчикамvoidwithQueue(java.lang.Runnable run)Запустить выполнение кода в блоке, и не рассылать уведомления до завершения блока кода<T> TwithQueue(java.util.function.Supplier<T> run)Запустить выполнение кода в блоке, и не рассылать уведомления до завершения блока кодаMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface xyz.cofe.ecolls.ReadWriteLockProperty
getReadWriteLock, setReadWriteLockMethods inherited from interface xyz.cofe.ecolls.ReadWriteLockSupport
readLock, readLock, writeLock, writeLock
-
Field Details
-
callListener
Функция вызывающая listener.method( collectionEvent ); -
listeners
Hard ссылки на подписчиков -
weakListeners
Soft/Weak ссылки на подписчиков -
eventBlockLevel
protected final java.util.concurrent.atomic.AtomicInteger eventBlockLevel
-
-
Constructor Details
-
ListenersHelper
Конструктор. По умолчанию синхронизация включена, объект по которому происходит синх - this.- Parameters:
callListFunc- Функция вызывающая listener.method( collectionEvent );
-
ListenersHelper
public ListenersHelper(java.util.function.BiConsumer<ListenerType,EventType> callListFunc, java.util.concurrent.locks.ReadWriteLock rwLocks)Конструктор.- Parameters:
callListFunc- Функция вызывающая listener.method( collectionEvent );rwLocks- Блокировки чтения/записи
-
-
Method Details
-
getReadLock
public java.util.concurrent.locks.Lock getReadLock()Description copied from interface:ReadWriteLockSupportВозвращает блокировку чтения- Specified by:
getReadLockin interfaceGetReadLock- Specified by:
getReadLockin interfaceReadWriteLockProperty- Specified by:
getReadLockin interfaceReadWriteLockSupport- Returns:
- блокировка чтения
-
getWriteLock
public java.util.concurrent.locks.Lock getWriteLock()Description copied from interface:ReadWriteLockSupportВозвращает блокировку записи- Specified by:
getWriteLockin interfaceGetWriteLock- Specified by:
getWriteLockin interfaceReadWriteLockProperty- Specified by:
getWriteLockin interfaceReadWriteLockSupport- Returns:
- блокировка записи
-
hasListener
Проверка наличия подписчика в списке обработки- Parameters:
listener- подписчик- Returns:
- true - есть в списке обработки
-
getListeners
Получение списка подписчиков- Returns:
- подписчики
-
addListener
Добавление подписчика.- Parameters:
listener- Подписчик.- Returns:
- Интерфес для отсоединения подписчика
-
addListener
Добавление подписчика.- Parameters:
listener- Подписчик.weakLink- true - добавить как weak ссылку / false - как hard ссылку- Returns:
- Интерфес для отсоединения подписчика
-
removeListener
Удаление подписчика из списка обработки- Parameters:
listener- подписчик
-
removeAllListeners
public void removeAllListeners() -
withQueue
public void withQueue(java.lang.Runnable run)Запустить выполнение кода в блоке, и не рассылать уведомления до завершения блока кода- Parameters:
run- блок кода
-
withQueue
public <T> T withQueue(java.util.function.Supplier<T> run)Запустить выполнение кода в блоке, и не рассылать уведомления до завершения блока кода- Type Parameters:
T- тип возвращаемого занчения из блока- Parameters:
run- блок кода- Returns:
- возвращаемое значение
-
fireEvent
Рассылка уведомления подписчикам- Parameters:
event- уведомление
-
getEventQueue
Очередь событий- Returns:
- Очередь событий
-
addEvent
Добавляет событие в очередь- Parameters:
ev- событие
-
runEventQueue
public void runEventQueue()Отправляет события из очереди подписчикам -
get
public static <LS, EV> ListenersHelper<LS,EV> get(java.lang.Class cls, java.lang.Object inst, java.util.function.BiConsumer<LS,EV> invoker)Поддержка в реализации подписчиков на события- Type Parameters:
LS- Тип подписчикаEV- Тип уведомления- Parameters:
cls- Класс/интерфейс реализующий логику работыinst- Экземпляр класса/интерфейсаinvoker- Функция передачи уведомления подписчику- Returns:
- Помошник в реализции Listener
-