/** {@inheritDoc} */ public void destroy() { started.set(false); destroyed.set(true); releaseExternalResources(); if (notifierFuture != null) { notifierFuture.cancel(true); } if (asyncWriteFuture != null) { asyncWriteFuture.cancel(true); } if (bc != null) { bc.destroy(); } if (broadcasterCache != null) { broadcasterCache.stop(); } resources.clear(); broadcastOnResume.clear(); messages.clear(); asyncWriteQueue.clear(); delayedBroadcast.clear(); broadcasterCache = null; if (BroadcasterFactory.getDefault() != null) { BroadcasterFactory.getDefault().remove(this, name); } if (currentLifecycleTask != null) { currentLifecycleTask.cancel(true); } }
protected boolean retrieveTrackedBroadcast( final AtmosphereResource<?, ?> r, final AtmosphereResourceEvent e) { List<?> missedMsg = broadcasterCache.retrieveFromCache(r); if (!missedMsg.isEmpty()) { e.setMessage(missedMsg); return true; } return false; }
protected void start() { if (!started.getAndSet(true)) { broadcasterCache = bc.getBroadcasterCache(); broadcasterCache.start(); notifierFuture = bc.getExecutorService().submit(getBroadcastHandler()); asyncWriteFuture = bc.getAsyncWriteService().submit(getAsyncWriteHandler()); } }
protected void trackBroadcastMessage(final AtmosphereResource<?, ?> r, Object msg) { broadcasterCache.addToCache(r, msg); }