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