@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.isClosedByApplication()) { onClose(event); } else if (event.isCancelled() || event.isClosedByClient()) { 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.debug("Listener error {}", t); AtmosphereResourceEventImpl.class.cast(event).setThrowable(t); try { onThrowable(event); } catch (Throwable t2) { logger.warn("Listener error {}", t2); } } return this; }