protected void checkCachedAndPush( final AtmosphereResource<?, ?> r, final AtmosphereResourceEvent e) { retrieveTrackedBroadcast(r, e); if (e.getMessage() instanceof List && !((List) e.getMessage()).isEmpty()) { broadcast(r, e); } }
protected void executeAsyncWrite( final AtmosphereResource<?, ?> resource, final Object msg, final BroadcasterFuture future) { if (resource.getAtmosphereResourceEvent().isCancelled()) { return; } final AtmosphereResourceEvent event = resource.getAtmosphereResourceEvent(); event.setMessage(msg); try { if (resource.getAtmosphereResourceEvent() != null && !resource.getAtmosphereResourceEvent().isCancelled() && HttpServletRequest.class.isAssignableFrom(resource.getRequest().getClass())) { HttpServletRequest.class .cast(resource.getRequest()) .setAttribute(CometSupport.MAX_INACTIVE, System.currentTimeMillis()); } } catch (Exception t) { // Shield us from any corrupted Request logger.debug("Preventing corruption of a recycled request: resource" + resource, event); removeAtmosphereResource(resource); BroadcasterFactory.getDefault().removeAllAtmosphereResource(resource); return; } broadcast(resource, event); if (resource instanceof AtmosphereEventLifecycle) { ((AtmosphereEventLifecycle) resource).notifyListeners(); } if (future != null) { future.done(); } }
protected boolean retrieveTrackedBroadcast( final AtmosphereResource<?, ?> r, final AtmosphereResourceEvent e) { List<?> missedMsg = broadcasterCache.retrieveFromCache(r); if (!missedMsg.isEmpty()) { e.setMessage(missedMsg); return true; } return false; }
/** {@inheritDoc} */ @Override public AtmosphereResource notifyListeners(AtmosphereResourceEvent event) { if (listeners.size() > 0) { logger.trace("Invoking listener with {}", event); } else { return this; } Action oldAction = action; try { if (event.isCancelled()) { if (!disconnected.getAndSet(true)) { onDisconnect(event); } } else if (event.isResuming() || event.isResumedOnTimeout()) { onResume(event); } else if (!isSuspendEvent.getAndSet(true) && event.isSuspended()) { onSuspend(event); } else if (event.throwable() != null) { onThrowable(event); } else { onBroadcast(event); } if (oldAction.type() != action.type()) { action().type(Action.TYPE.CREATED); } } catch (Throwable t) { logger.trace("Listener error {}", t); AtmosphereResourceEventImpl.class.cast(event).setThrowable(t); try { onThrowable(event); } catch (Throwable t2) { logger.warn("Listener error {}", t2); } } return this; }
@Override public void onStateChange(AtmosphereResourceEvent e) throws IOException { value.get().add(e.getResource()); }