|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectnet.sourceforge.hiveevents.ChannelImpl<T>
public class ChannelImpl<T>
Thread-unsafe implementation of an Event Channel.
Nested Class Summary | |
---|---|
protected static class |
ChannelImpl.AbstractConsumerInfo<T>
|
protected static interface |
ChannelImpl.ConsumerInfo<T>
|
Constructor Summary | |
---|---|
ChannelImpl(java.lang.String name,
int pullConsumerPriority,
java.lang.Class<T> clazz,
boolean logEvents)
|
Method Summary | |
---|---|
void |
block()
Temporarily block the Channel, ie any supplied event will be stored inside the Channel but not dispatched to consumers until the Channel is unblocked. |
protected ChannelImpl.ConsumerInfo<T> |
getConsumer(int idConsumer)
|
java.lang.String |
getName()
Get the name (unique identifier) of this Channel. |
protected void |
logEvent(java.lang.String message,
T event)
|
T[] |
pull(int idConsumer)
Called by a registered pull-consumer to retrieve all events supplied to the Channel since the previous call to pull() (or since
registration if this is the first call). |
T[] |
pull(int idConsumer,
long timeout)
Called by a registered pull-consumer to retrieve all events supplied to the Channel since the previous call to pull() (or since
registration if this is the first call). |
protected void |
purgeConsumers()
|
void |
push(T event)
Called by an event supplier to trigger this Channel to notify all consumers about a new event. |
protected void |
registerConsumer(ChannelImpl.ConsumerInfo<T> info)
|
int |
registerPullConsumer()
Registers a pull-consumer to this Channel. |
int |
registerPullConsumer(Filter<T> filter)
Registers a pull-consumer to this Channel. |
int |
registerPushConsumer(int priority,
Consumer<T> consumer)
Registers a push-consumer to this Channel. |
int |
registerPushConsumer(int priority,
Filter<T> filter,
Consumer<T> consumer)
Registers a push-consumer to this Channel. |
void |
unblock()
Unblocks a Channel that was blocked ie any event that was received during the blocking time is dispatched to all consumers and any new event received will be normally dispatched as well. |
void |
unblockPullConsumer(int idConsumer)
Unblocks a pull consumer that is currently waiting for a timed pull call to return some events. |
void |
unregisterAllConsumers()
Unregister all consumers from this Channel. |
void |
unregisterConsumer(int idConsumer)
Unregister the identified consumer from this Channel. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public ChannelImpl(java.lang.String name, int pullConsumerPriority, java.lang.Class<T> clazz, boolean logEvents)
Method Detail |
---|
public java.lang.String getName()
Channel
getName
in interface Channel<T>
public void block()
Channel
If called n times, unblock()
must also be called n times to
unblock the Channel.
block
in interface Channel<T>
public void unblock()
Channel
This method has no effect if the Channel is not currently blocked.
It has no effect either if it has been called less times than
block()
.
unblock
in interface Channel<T>
public void unregisterConsumer(int idConsumer)
Channel
unregisterConsumer
in interface Channel<T>
idConsumer
- the unique id of the consumer to unregister. If this
id does not exist, then the method does nothing.public void unregisterAllConsumers()
Channel
unregisterAllConsumers
in interface Channel<T>
public int registerPushConsumer(int priority, Consumer<T> consumer)
Channel
Normally, the Channel only keeps a weak reference to every push consumer
(until it is unregistered or until it has no strong references left).
However, for convenience reasons when using consumer instances which we
do not want to (or cannot) keep a strong reference, consumers can
implement the PersistentConsumer
marker interface, for
these, the Channel keeps a strong reference so that they are not garbage
collected until they are explicitly unregistered.
registerPushConsumer
in interface Channel<T>
priority
- the priority (order) with which the new consumer should
be notified of new events, the lower the sooner.consumer
- the actual instance that will be notified
(push()
) when events are supplied to the Channel
public int registerPushConsumer(int priority, Filter<T> filter, Consumer<T> consumer)
Channel
registerPushConsumer
in interface Channel<T>
priority
- the priority (order) with which the new consumer should
be notified of new events, the lower the sooner.filter
- a filter instance that will be called for each event
received by the Channel in order to decide whether the new consumer must
be notified of this event or notconsumer
- the actual instance that will be notified
(push()
) when events are supplied to the Channel
public int registerPullConsumer()
Channel
pull()
on this Channel on behalf
of that consumer).
registerPullConsumer
in interface Channel<T>
pull()
)public int registerPullConsumer(Filter<T> filter)
Channel
pull()
on this Channel on behalf of that consumer).
registerPullConsumer
in interface Channel<T>
filter
- a filter instance that will be called for each event
received by the Channel in order to decide whether the new consumer must
be notified of this event or not
pull()
)protected void purgeConsumers()
protected void registerConsumer(ChannelImpl.ConsumerInfo<T> info)
public void push(T event)
Channel
push
in interface Channel<T>
push
in interface Consumer<T>
event
- the event notified (can be anything)protected void logEvent(java.lang.String message, T event)
public T[] pull(int idConsumer)
Channel
pull()
(or since
registration if this is the first call).
This method is blocking for the calling thread until there are events to return.
pull
in interface Channel<T>
idConsumer
- the unique id of the consumer that pulls data. If this
id does not exist, then the method returns null
.
public T[] pull(int idConsumer, long timeout)
Channel
pull()
(or since
registration if this is the first call).
This method is blocking for the calling thread until there are events to return or the specified timeout is elapsed.
pull
in interface Channel<T>
idConsumer
- the unique id of the consumer to unregister. If this
id does not exist, then the method returns null
.timeout
- maximum time (in ms) to wait for events to come; if 0,
then the method returns immediately whether there are events or not.
public void unblockPullConsumer(int idConsumer)
Channel
unblockPullConsumer
in interface Channel<T>
idConsumer
- the unique id of the consumer to unblock.protected ChannelImpl.ConsumerInfo<T> getConsumer(int idConsumer)
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |