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 Object perRequestFilter(AtmosphereResource<?, ?> r, Entry msg) { Object finalMsg = msg.message; if (AtmosphereResourceImpl.class.isAssignableFrom(r.getClass())) { if (AtmosphereResourceImpl.class.cast(r).isInScope()) { if (r.getRequest() instanceof HttpServletRequest && bc.hasPerRequestFilters()) { Object message = msg.originalMessage; BroadcastAction a = bc.filter( (HttpServletRequest) r.getRequest(), (HttpServletResponse) r.getResponse(), message); if (a.action() == BroadcastAction.ACTION.ABORT || a.message() != msg.originalMessage) { finalMsg = a.message(); } } trackBroadcastMessage(r, finalMsg); } else { // The resource is no longer valid. removeAtmosphereResource(r); BroadcasterFactory.getDefault().removeAllAtmosphereResource(r); } } return finalMsg; }