Exemplo n.º 1
0
 protected void checkCachedAndPush(
     final AtmosphereResource<?, ?> r, final AtmosphereResourceEvent e) {
   retrieveTrackedBroadcast(r, e);
   if (e.getMessage() instanceof List && !((List) e.getMessage()).isEmpty()) {
     broadcast(r, e);
   }
 }
Exemplo n.º 2
0
  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();
    }
  }
Exemplo n.º 3
0
 protected boolean retrieveTrackedBroadcast(
     final AtmosphereResource<?, ?> r, final AtmosphereResourceEvent e) {
   List<?> missedMsg = broadcasterCache.retrieveFromCache(r);
   if (!missedMsg.isEmpty()) {
     e.setMessage(missedMsg);
     return true;
   }
   return false;
 }
Exemplo n.º 4
0
  /** {@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());
 }