diff --git a/modules/cpr/src/main/java/org/atmosphere/cpr/AsynchronousProcessor.java b/modules/cpr/src/main/java/org/atmosphere/cpr/AsynchronousProcessor.java index 04ff6b702fd..7f2d115cc4a 100755 --- a/modules/cpr/src/main/java/org/atmosphere/cpr/AsynchronousProcessor.java +++ b/modules/cpr/src/main/java/org/atmosphere/cpr/AsynchronousProcessor.java @@ -413,7 +413,7 @@ void invokeAtmosphereHandler(AtmosphereResourceImpl r) throws IOException { AtmosphereRequest req = r.getRequest(false); String disableOnEvent = r.getAtmosphereConfig().getInitParameter(ApplicationConfig.DISABLE_ONSTATE_EVENT); - r.getAtmosphereResourceEvent().setMessage(null); + r.getAtmosphereResourceEvent().setMessage(r.writeOnTimeout()); try { if (disableOnEvent == null || !disableOnEvent.equals(String.valueOf(true))) { AtmosphereHandler atmosphereHandler = diff --git a/modules/cpr/src/main/java/org/atmosphere/cpr/AtmosphereResource.java b/modules/cpr/src/main/java/org/atmosphere/cpr/AtmosphereResource.java index 08285d91ff7..d0aac97701b 100644 --- a/modules/cpr/src/main/java/org/atmosphere/cpr/AtmosphereResource.java +++ b/modules/cpr/src/main/java/org/atmosphere/cpr/AtmosphereResource.java @@ -293,4 +293,14 @@ enum TRANSPORT {POLLING, LONG_POLLING, STREAMING, WEBSOCKET, JSONP, UNDEFINED} */ AtmosphereHandler getAtmosphereHandler(); + /** + * Set a message that will be written when the resource times out. Cab be an {@link Object} or {@link java.util.concurrent.Callable} + */ + AtmosphereResource writeOnTimeout(Object o); + + /** + * Return the object that will be written when the resource times out; + */ + Object writeOnTimeout(); + } diff --git a/modules/cpr/src/main/java/org/atmosphere/cpr/AtmosphereResourceImpl.java b/modules/cpr/src/main/java/org/atmosphere/cpr/AtmosphereResourceImpl.java index cf9bd9ae0ed..2081db3612d 100644 --- a/modules/cpr/src/main/java/org/atmosphere/cpr/AtmosphereResourceImpl.java +++ b/modules/cpr/src/main/java/org/atmosphere/cpr/AtmosphereResourceImpl.java @@ -99,6 +99,7 @@ public class AtmosphereResourceImpl implements AtmosphereResource { private boolean isResumed = false; private boolean isCancelled = false; private boolean resumeOnBroadcast = false; + private Object writeOnTimeout = null; private final ConcurrentLinkedQueue listeners = new ConcurrentLinkedQueue(); @@ -162,6 +163,23 @@ public AtmosphereHandler getAtmosphereHandler() { return atmosphereHandler; } + /** + * {@inheritDoc} + */ + @Override + public AtmosphereResource writeOnTimeout(Object o) { + writeOnTimeout = o; + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public Object writeOnTimeout() { + return writeOnTimeout; + } + /** * {@inheritDoc} */