public class DefaultBroadcaster extends java.lang.Object implements Broadcaster
Broadcaster implementation.
Broadcast messages to suspended response using the caller's Thread.
This basic Broadcaster use an ExecutorService
to broadcast message, hence the broadcast operation is asynchronous. Make sure
you block on broadcast(Object).get()} if you need synchronous operations.| Modifier and Type | Class and Description |
|---|---|
protected static class |
DefaultBroadcaster.AsyncWriteToken |
static class |
DefaultBroadcaster.Entry |
Broadcaster.POLICY, Broadcaster.SCOPE| Modifier and Type | Field and Description |
|---|---|
static java.lang.String |
ASYNC_TOKEN |
protected java.util.concurrent.Future<?>[] |
asyncWriteFuture |
protected BroadcasterConfig |
bc |
protected java.util.concurrent.ConcurrentLinkedQueue<BroadcasterListener> |
broadcasterListeners |
protected java.util.concurrent.ConcurrentLinkedQueue<DefaultBroadcaster.Entry> |
broadcastOnResume |
static java.lang.String |
CACHED |
protected BroadcasterCache.STRATEGY |
cacheStrategy |
protected AtmosphereConfig |
config |
protected java.util.concurrent.ConcurrentLinkedQueue<DefaultBroadcaster.Entry> |
delayedBroadcast |
protected java.util.concurrent.atomic.AtomicBoolean |
destroyed |
protected java.util.concurrent.atomic.AtomicInteger |
dispatchThread |
protected java.util.concurrent.ConcurrentLinkedQueue<BroadcasterLifeCyclePolicyListener> |
lifeCycleListeners |
protected java.util.concurrent.BlockingQueue<DefaultBroadcaster.Entry> |
messages |
protected java.lang.String |
name |
protected AtmosphereResource |
noOpsResource |
protected java.util.concurrent.Future<?>[] |
notifierFuture |
protected java.util.concurrent.atomic.AtomicBoolean |
outOfOrderBroadcastSupported |
protected java.util.concurrent.ConcurrentLinkedQueue<AtmosphereResource> |
resources |
protected Broadcaster.SCOPE |
scope |
protected java.util.concurrent.atomic.AtomicBoolean |
started |
protected org.atmosphere.cpr.DefaultBroadcaster.WriteQueue |
uniqueWriteQueue |
protected java.net.URI |
uri |
protected int |
waitTime |
protected java.util.concurrent.ConcurrentHashMap<java.lang.String,org.atmosphere.cpr.DefaultBroadcaster.WriteQueue> |
writeQueues |
protected int |
writeTimeoutInSecond |
| Constructor and Description |
|---|
DefaultBroadcaster(java.lang.String name,
AtmosphereConfig config) |
DefaultBroadcaster(java.lang.String name,
java.net.URI uri,
AtmosphereConfig config) |
| Modifier and Type | Method and Description |
|---|---|
Broadcaster |
addAtmosphereResource(AtmosphereResource r)
Add a
AtmosphereResource to the list of item to be notified when
the Broadcaster.broadcast(T) is invoked. |
void |
addBroadcasterLifeCyclePolicyListener(BroadcasterLifeCyclePolicyListener b)
|
Broadcaster |
addBroadcasterListener(BroadcasterListener b)
Add a
BroadcasterListener |
protected void |
afterFilterCacheEntry(AtmosphereResource r,
java.lang.Object finalMsg,
UUIDBroadcasterCache.CacheMessage cacheMessage) |
<T> java.util.concurrent.Future<T> |
awaitAndBroadcast(T t,
long time,
java.util.concurrent.TimeUnit timeUnit)
Await for available
AtmosphereResource before broadcasting. |
<T> java.util.concurrent.Future<T> |
broadcast(T msg)
Broadcast the
Object to all suspended response, e.g. |
<T> java.util.concurrent.Future<T> |
broadcast(T msg,
AtmosphereResource r)
Broadcast the
Object to all suspended response, e.g. |
<T> java.util.concurrent.Future<T> |
broadcast(T msg,
java.util.Set<AtmosphereResource> subset)
Broadcast the
Object to all suspended response, e.g. |
protected void |
broadcastOnResume(AtmosphereResource r) |
<T> java.util.concurrent.Future<T> |
broadcastOnResume(T msg)
Broadcast the
Object when an AtmosphereResource is resumed by a timeout or when using
AtmosphereResource.resume() |
protected void |
cacheAndSuspend(AtmosphereResource r)
Look in the cache to see of there are messages available, and takes the appropriate actions.
|
void |
cacheLostMessage(AtmosphereResource r)
Cache the message because an unexpected exception occurred.
|
void |
cacheLostMessage(AtmosphereResource r,
boolean force)
Cache the message because an unexpected exception occurred.
|
void |
cacheLostMessage(AtmosphereResource r,
DefaultBroadcaster.AsyncWriteToken token)
Cache the message because an unexpected exception occurred.
|
void |
cacheLostMessage(AtmosphereResource r,
DefaultBroadcaster.AsyncWriteToken token,
boolean force)
Cache the message because an unexpected exception occurred.
|
protected boolean |
checkCachedAndPush(AtmosphereResource r,
AtmosphereResourceEvent e)
Return false if no cached messages has been found, true if cached.
|
protected BroadcasterConfig |
createBroadcasterConfig(AtmosphereConfig config)
Create
BroadcasterConfig |
<T> java.util.concurrent.Future<T> |
delayBroadcast(T o)
Delay the broadcast operation.
|
<T> java.util.concurrent.Future<T> |
delayBroadcast(T o,
long delay,
java.util.concurrent.TimeUnit t)
Delay the broadcast operation.
|
protected void |
deliverPush(DefaultBroadcaster.Entry entry,
boolean rec) |
void |
destroy()
Destroy this instance and shutdown it's associated
ExecutorService |
protected void |
dispatchMessages(DefaultBroadcaster.Entry e) |
protected void |
entryDone(BroadcasterFuture<?> f) |
protected void |
executeAsyncWrite(DefaultBroadcaster.AsyncWriteToken token) |
protected java.lang.Object |
filter(java.lang.Object msg)
Invoke the
BroadcastFilter |
void |
finalize() |
protected BroadcasterFuture<java.lang.Object> |
futureDone(java.lang.Object msg) |
protected java.lang.Runnable |
getAsyncWriteHandler(org.atmosphere.cpr.DefaultBroadcaster.WriteQueue writeQueue) |
java.util.Collection<AtmosphereResource> |
getAtmosphereResources()
Return an
List of AtmosphereResource. |
BroadcasterConfig |
getBroadcasterConfig()
Return the current
BroadcasterConfig |
protected java.lang.Runnable |
getBroadcastHandler() |
java.lang.String |
getID()
Return the id of this
Broadcaster |
Broadcaster.SCOPE |
getScope()
Return the
Broadcaster.SCOPE |
protected boolean |
invokeFiltersAndCache(DefaultBroadcaster.Entry entry) |
protected void |
invokeOnStateChange(AtmosphereResource r,
AtmosphereResourceEvent e) |
boolean |
isDestroyed()
Return true if that
Broadcaster has been destroyed |
protected void |
killReactiveThreads() |
void |
onException(java.lang.Throwable t,
AtmosphereResource ar) |
void |
onException(java.lang.Throwable t,
AtmosphereResource ar,
boolean notifyAndCache) |
protected java.lang.Object |
perRequestFilter(AtmosphereResource r,
DefaultBroadcaster.Entry msg,
boolean cache) |
protected void |
prepareInvokeOnStateChange(AtmosphereResource r,
AtmosphereResourceEvent e) |
void |
push(DefaultBroadcaster.Entry entry) |
protected void |
queueWriteIO(AtmosphereResource r,
java.lang.Object finalMsg,
DefaultBroadcaster.Entry entry) |
protected int |
reactiveThreadsCount()
Return the default number of reactive threads that will be waiting for work when a broadcast operation
is executed.
|
void |
releaseExternalResources()
Release external resources associated with this Broadcaster.
|
Broadcaster |
removeAtmosphereResource(AtmosphereResource r)
Remove a
AtmosphereResource from the list of item to be notified when
the Broadcaster.broadcast(T) is invoked. |
protected Broadcaster |
removeAtmosphereResource(AtmosphereResource r,
boolean executeDone) |
void |
removeBroadcasterLifeCyclePolicyListener(BroadcasterLifeCyclePolicyListener b)
Remove a
BroadcasterLifeCyclePolicyListener |
Broadcaster |
removeBroadcasterListener(BroadcasterListener b)
Remove a
BroadcasterListener |
void |
resumeAll()
Resume all suspended responses (
AtmosphereResource) added via
Broadcaster.addAtmosphereResource(org.atmosphere.cpr.AtmosphereResource). |
protected boolean |
retrieveTrackedBroadcast(AtmosphereResource r,
AtmosphereResourceEvent e) |
java.util.concurrent.Future<?> |
scheduleFixedBroadcast(java.lang.Object o,
long waitFor,
long period,
java.util.concurrent.TimeUnit t)
Broadcast periodically.
|
java.util.concurrent.Future<?> |
scheduleFixedBroadcast(java.lang.Object o,
long period,
java.util.concurrent.TimeUnit t)
Broadcast periodically.
|
Broadcaster |
setBroadcasterCacheStrategy(BroadcasterCache.STRATEGY cacheStrategy)
Set the
BroadcasterCache.STRATEGY |
void |
setBroadcasterConfig(BroadcasterConfig bc)
Set the
BroadcasterConfig instance. |
void |
setBroadcasterLifeCyclePolicy(BroadcasterLifeCyclePolicy lifeCyclePolicy)
Set the
BroadcasterLifeCyclePolicy. |
void |
setID(java.lang.String id)
Set the id of this
Broadcaster |
void |
setScope(Broadcaster.SCOPE scope)
Set the scope.
|
void |
setSuspendPolicy(long maxSuspendResource,
Broadcaster.POLICY policy)
Set the maximum number of suspended
AtmosphereResource. |
protected void |
spawnReactor() |
protected void |
start() |
java.lang.String |
toString() |
protected void |
trackBroadcastMessage(AtmosphereResource r,
java.lang.Object msg) |
public static final java.lang.String CACHED
public static final java.lang.String ASYNC_TOKEN
protected final java.util.concurrent.ConcurrentLinkedQueue<AtmosphereResource> resources
protected BroadcasterConfig bc
protected final java.util.concurrent.BlockingQueue<DefaultBroadcaster.Entry> messages
protected final java.util.concurrent.ConcurrentLinkedQueue<BroadcasterListener> broadcasterListeners
protected final java.util.concurrent.atomic.AtomicBoolean started
protected final java.util.concurrent.atomic.AtomicBoolean destroyed
protected Broadcaster.SCOPE scope
protected java.lang.String name
protected final java.util.concurrent.ConcurrentLinkedQueue<DefaultBroadcaster.Entry> delayedBroadcast
protected final java.util.concurrent.ConcurrentLinkedQueue<DefaultBroadcaster.Entry> broadcastOnResume
protected final java.util.concurrent.ConcurrentLinkedQueue<BroadcasterLifeCyclePolicyListener> lifeCycleListeners
protected final java.util.concurrent.ConcurrentHashMap<java.lang.String,org.atmosphere.cpr.DefaultBroadcaster.WriteQueue> writeQueues
protected final org.atmosphere.cpr.DefaultBroadcaster.WriteQueue uniqueWriteQueue
protected final java.util.concurrent.atomic.AtomicInteger dispatchThread
protected java.util.concurrent.Future<?>[] notifierFuture
protected java.util.concurrent.Future<?>[] asyncWriteFuture
protected java.net.URI uri
protected AtmosphereConfig config
protected BroadcasterCache.STRATEGY cacheStrategy
protected final java.util.concurrent.atomic.AtomicBoolean outOfOrderBroadcastSupported
protected int writeTimeoutInSecond
protected final AtmosphereResource noOpsResource
protected int waitTime
public DefaultBroadcaster(java.lang.String name,
java.net.URI uri,
AtmosphereConfig config)
public DefaultBroadcaster(java.lang.String name,
AtmosphereConfig config)
protected BroadcasterConfig createBroadcasterConfig(AtmosphereConfig config)
BroadcasterConfigconfig - the AtmosphereConfigBroadcasterConfigpublic Broadcaster setBroadcasterCacheStrategy(BroadcasterCache.STRATEGY cacheStrategy)
BroadcasterCache.STRATEGYcacheStrategy - the BroadcasterCache.STRATEGYpublic void destroy()
ExecutorServicedestroy in interface Broadcasterpublic java.util.Collection<AtmosphereResource> getAtmosphereResources()
List of AtmosphereResource.getAtmosphereResources in interface BroadcasterList of AtmosphereResource associated with this Broadcaster.Broadcaster.addAtmosphereResource(AtmosphereResource)public void setScope(Broadcaster.SCOPE scope)
setScope in interface Broadcasterscope - Broadcaster.SCOPE to set.public Broadcaster.SCOPE getScope()
Broadcaster.SCOPEgetScope in interface BroadcasterBroadcaster.SCOPE of Broadcaster.public void setID(java.lang.String id)
BroadcastersetID in interface Broadcasterid - ID of this Broadcasterpublic java.lang.String getID()
BroadcastergetID in interface BroadcasterBroadcasterpublic void resumeAll()
AtmosphereResource) added via
Broadcaster.addAtmosphereResource(org.atmosphere.cpr.AtmosphereResource).resumeAll in interface Broadcasterpublic void releaseExternalResources()
AtmosphereResource and some resource (like database connections, JMS queue, etc.) needs to be
closed.releaseExternalResources in interface Broadcasterpublic void setBroadcasterLifeCyclePolicy(BroadcasterLifeCyclePolicy lifeCyclePolicy)
BroadcasterLifeCyclePolicy. Make sure you are selecting the right policy
to avoid unexpected situation.setBroadcasterLifeCyclePolicy in interface BroadcasterlifeCyclePolicy - a BroadcasterLifeCyclePolicypublic void addBroadcasterLifeCyclePolicyListener(BroadcasterLifeCyclePolicyListener b)
addBroadcasterLifeCyclePolicyListener in interface Broadcasterb - a BroadcasterLifeCyclePolicyListenerpublic void removeBroadcasterLifeCyclePolicyListener(BroadcasterLifeCyclePolicyListener b)
BroadcasterLifeCyclePolicyListenerremoveBroadcasterLifeCyclePolicyListener in interface Broadcasterb - a BroadcasterLifeCyclePolicyListenerpublic boolean isDestroyed()
Broadcaster has been destroyedisDestroyed in interface BroadcasterBroadcaster has been destroyedpublic <T> java.util.concurrent.Future<T> awaitAndBroadcast(T t,
long time,
java.util.concurrent.TimeUnit timeUnit)
AtmosphereResource before broadcasting. This method will block until
Broadcaster.addAtmosphereResource(AtmosphereResource) gets invoked.awaitAndBroadcast in interface Broadcasterpublic Broadcaster addBroadcasterListener(BroadcasterListener b)
BroadcasterListeneraddBroadcasterListener in interface Broadcasterb - a BroadcasterListenerpublic Broadcaster removeBroadcasterListener(BroadcasterListener b)
BroadcasterListenerremoveBroadcasterListener in interface Broadcasterb - a BroadcasterListenerprotected java.lang.Runnable getBroadcastHandler()
protected java.lang.Runnable getAsyncWriteHandler(org.atmosphere.cpr.DefaultBroadcaster.WriteQueue writeQueue)
protected void start()
protected void spawnReactor()
protected void killReactiveThreads()
protected int reactiveThreadsCount()
public void finalize()
throws java.lang.Throwable
finalize in class java.lang.Objectjava.lang.Throwablepublic void push(DefaultBroadcaster.Entry entry)
protected void deliverPush(DefaultBroadcaster.Entry entry, boolean rec)
protected void afterFilterCacheEntry(AtmosphereResource r, java.lang.Object finalMsg, UUIDBroadcasterCache.CacheMessage cacheMessage)
protected boolean invokeFiltersAndCache(DefaultBroadcaster.Entry entry)
protected void queueWriteIO(AtmosphereResource r, java.lang.Object finalMsg, DefaultBroadcaster.Entry entry) throws java.lang.InterruptedException
java.lang.InterruptedExceptionprotected java.lang.Object perRequestFilter(AtmosphereResource r, DefaultBroadcaster.Entry msg, boolean cache)
protected void executeAsyncWrite(DefaultBroadcaster.AsyncWriteToken token)
protected boolean checkCachedAndPush(AtmosphereResource r, AtmosphereResourceEvent e)
r - e - protected boolean retrieveTrackedBroadcast(AtmosphereResource r, AtmosphereResourceEvent e)
protected void trackBroadcastMessage(AtmosphereResource r, java.lang.Object msg)
protected void invokeOnStateChange(AtmosphereResource r, AtmosphereResourceEvent e)
protected void prepareInvokeOnStateChange(AtmosphereResource r, AtmosphereResourceEvent e)
public void onException(java.lang.Throwable t,
AtmosphereResource ar)
public void onException(java.lang.Throwable t,
AtmosphereResource ar,
boolean notifyAndCache)
public void cacheLostMessage(AtmosphereResource r)
r - AtmosphereResourcepublic void cacheLostMessage(AtmosphereResource r, boolean force)
r - AtmosphereResourcepublic void cacheLostMessage(AtmosphereResource r, DefaultBroadcaster.AsyncWriteToken token)
r - AtmosphereResourcepublic void cacheLostMessage(AtmosphereResource r, DefaultBroadcaster.AsyncWriteToken token, boolean force)
r - AtmosphereResourcepublic void setSuspendPolicy(long maxSuspendResource,
Broadcaster.POLICY policy)
AtmosphereResource. If the max is reached, Atmosphere will either
resume AtmosphereResource using Broadcaster.POLICY.FIFO (first in first out)
or Broadcaster.POLICY.REJECT the AtmosphereResource.
By default the number is uunlimited.setSuspendPolicy in interface BroadcastermaxSuspendResource - max suspendedpublic <T> java.util.concurrent.Future<T> broadcast(T msg)
Object to all suspended response, e.g. invoke
AtmosphereHandler.onStateChange(org.atmosphere.cpr.AtmosphereResourceEvent).broadcast in interface Broadcastermsg - and Object to be broadcasted.Future that can be used to synchronize using the Future.get()protected BroadcasterFuture<java.lang.Object> futureDone(java.lang.Object msg)
protected void dispatchMessages(DefaultBroadcaster.Entry e)
protected java.lang.Object filter(java.lang.Object msg)
BroadcastFiltermsg - public <T> java.util.concurrent.Future<T> broadcast(T msg,
AtmosphereResource r)
Object to all suspended response, e.g. invoke
AtmosphereHandler.onStateChange(org.atmosphere.cpr.AtmosphereResourceEvent) with an instance of AtmosphereResource, representing
a single suspended response..broadcast in interface Broadcastermsg - and Object to be broadcasted.r - an AtmosphereResourceFuture that can be used to synchronize using the Future.get()public <T> java.util.concurrent.Future<T> broadcastOnResume(T msg)
Object when an AtmosphereResource is resumed by a timeout or when using
AtmosphereResource.resume()broadcastOnResume in interface Broadcastermsg - and Object to be broadcasted.Future that can be used to synchronize using the Future.get()protected void broadcastOnResume(AtmosphereResource r)
public <T> java.util.concurrent.Future<T> broadcast(T msg,
java.util.Set<AtmosphereResource> subset)
Object to all suspended response, e.g. invoke
AtmosphereHandler.onStateChange(org.atmosphere.cpr.AtmosphereResourceEvent) with a Set of AtmosphereResource,
representing a set of AtmosphereHandler.broadcast in interface Broadcastermsg - and Object to be broadcasted.subset - a Set of AtmosphereResourceFuture that can be used to synchronize using the Future.get()public Broadcaster addAtmosphereResource(AtmosphereResource r)
AtmosphereResource to the list of item to be notified when
the Broadcaster.broadcast(T) is invoked. It is strongly recommended to suspend the AtmosphereResource
before adding it to a Broadcaster.addAtmosphereResource in interface Broadcasterr - an AtmosphereResourceprotected void cacheAndSuspend(AtmosphereResource r)
r - AtmosphereResourceprotected void entryDone(BroadcasterFuture<?> f)
public Broadcaster removeAtmosphereResource(AtmosphereResource r)
AtmosphereResource from the list of item to be notified when
the Broadcaster.broadcast(T) is invoked.removeAtmosphereResource in interface Broadcasterr - an AtmosphereResourceprotected Broadcaster removeAtmosphereResource(AtmosphereResource r, boolean executeDone)
public void setBroadcasterConfig(BroadcasterConfig bc)
BroadcasterConfig instance.setBroadcasterConfig in interface Broadcasterbc - public BroadcasterConfig getBroadcasterConfig()
BroadcasterConfiggetBroadcasterConfig in interface BroadcasterBroadcasterConfigpublic <T> java.util.concurrent.Future<T> delayBroadcast(T o)
Object will be broadcasted
when the first Broadcaster.broadcast(java.lang.Object)
is invoked.delayBroadcast in interface Broadcastero - and Object to be broadcasted.Future that can be used to synchronize using the Future.get()public <T> java.util.concurrent.Future<T> delayBroadcast(T o,
long delay,
java.util.concurrent.TimeUnit t)
Object will be broadcasted once the
specified delay expires or when the first Broadcaster.broadcast(java.lang.Object)delayBroadcast in interface Broadcastero - and Object to be broadcasted.delay - Amount of time to delay.t - a TimeUnit of delay.Future that can be used to synchronize using the Future.get()public java.util.concurrent.Future<?> scheduleFixedBroadcast(java.lang.Object o,
long period,
java.util.concurrent.TimeUnit t)
Object will be broadcasted after every period
specified time frame expires. If the TimeUnit is set null, the
Object will be broadcasted when the first Broadcaster.broadcast(java.lang.Object)
is invoked.scheduleFixedBroadcast in interface Broadcastero - and Object to be broadcasted.period - Every so often broadcast.t - a TimeUnit of period.Future that can be used to synchronize using the Future.get()public java.util.concurrent.Future<?> scheduleFixedBroadcast(java.lang.Object o,
long waitFor,
long period,
java.util.concurrent.TimeUnit t)
Object will be broadcasted after every period
specified time frame expires. If the TimeUnit is set null, the
Object will be broadcasted when the first Broadcaster.broadcast(java.lang.Object) * is invoked.scheduleFixedBroadcast in interface Broadcastero - and Object to be broadcasted.waitFor - Wait for that long before first broadcast.period - The period inbetween broadcast.t - a TimeUnit of waitFor and period.Future that can be used to synchronize using the Future.get()public java.lang.String toString()
toString in class java.lang.ObjectCopyright © 2018. All Rights Reserved.