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
Отдельно стоит посмотреть на
ImmediateEvent
.- Author:
- Kamnev Georgiy ([email protected])
-
Field Summary
Fields Modifier and Type Field Description protected java.util.function.BiConsumer<ListenerType,EventType>
callListener
Функция вызывающая listener.method( collectionEvent );protected java.util.concurrent.atomic.AtomicInteger
eventBlockLevel
protected java.util.HashSet<ListenerType>
listeners
Hard ссылки на подписчиковprotected java.util.Map<ListenerType,java.lang.Integer>
listenersCalls
Кол-во вызовов подписчиковprotected java.util.WeakHashMap<ListenerType,java.lang.Object>
weakListeners
Soft/Weak ссылки на подписчиковprotected java.util.Map<ListenerType,java.lang.Integer>
weakListenersCalls
Кол-во вызовов подписчиков -
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 void
addEvent(EventType ev)
Добавляет событие в очередьjava.lang.AutoCloseable
addListener(ListenerType listener)
Добавление подписчика.java.lang.AutoCloseable
addListener(ListenerType listener, boolean weakLink)
Добавление подписчика.java.lang.AutoCloseable
addListener(ListenerType listener, boolean weakLink, int limitCalls)
Добавление подписчика.void
fireEvent(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.Lock
getReadLock()
Возвращает блокировку чтенияjava.util.concurrent.locks.Lock
getWriteLock()
Возвращает блокировку записиboolean
hasListener(ListenerType listener)
Проверка наличия подписчика в списке обработкиvoid
removeAllListeners()
void
removeListener(ListenerType listener)
Удаление подписчика из списка обработкиvoid
runEventQueue()
Отправляет события из очереди подписчикамvoid
withQueue(java.lang.Runnable run)
Запустить выполнение кода в блоке, и не рассылать уведомления до завершения блока кода<T> T
withQueue(java.util.function.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 Details
-
callListener
Функция вызывающая listener.method( collectionEvent ); -
listenersCalls
Кол-во вызовов подписчиков -
weakListenersCalls
Кол-во вызовов подписчиков -
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:
getReadLock
in interfaceGetReadLock
- Specified by:
getReadLock
in interfaceReadWriteLockProperty
- Specified by:
getReadLock
in interfaceReadWriteLockSupport
- Returns:
- блокировка чтения
-
getWriteLock
public java.util.concurrent.locks.Lock getWriteLock()Description copied from interface:ReadWriteLockSupport
Возвращает блокировку записи- Specified by:
getWriteLock
in interfaceGetWriteLock
- Specified by:
getWriteLock
in interfaceReadWriteLockProperty
- Specified by:
getWriteLock
in interfaceReadWriteLockSupport
- Returns:
- блокировка записи
-
hasListener
Проверка наличия подписчика в списке обработки- Parameters:
listener
- подписчик- Returns:
- true - есть в списке обработки
-
getListeners
Получение списка подписчиков- Returns:
- подписчики
-
addListener
Добавление подписчика.- Parameters:
listener
- Подписчик.- Returns:
- Интерфес для отсоединения подписчика
-
addListener
Добавление подписчика.- Parameters:
listener
- Подписчик.weakLink
- true - добавить как weak ссылку / false - как hard ссылку- Returns:
- Интерфес для отсоединения подписчика
-
addListener
public java.lang.AutoCloseable addListener(ListenerType listener, boolean weakLink, int limitCalls)Добавление подписчика.- Parameters:
listener
- Подписчик.weakLink
- true - добавить как weak ссылку / false - как hard ссылкуlimitCalls
- Ограничение кол-ва вызовов, 0 или меньше - нет ограничений- 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
-