org.wings.comet.GlassfishCometHandler Maven / Gradle / Ivy
The newest version!
package org.wings.comet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.glassfish.grizzly.comet.CometEvent;
import org.glassfish.grizzly.comet.DefaultCometHandler;
import org.wings.session.Session;
import org.wings.session.SessionManager;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
class GlassfishCometHandler extends DefaultCometHandler {
private static final transient Logger log = LoggerFactory.getLogger(GlassfishCometHandler.class);
private final Session session;
private HttpServletResponse response;
public GlassfishCometHandler(Session session) {
this.session = session;
}
public void attach(HttpServletResponse response) {
this.response = response;
}
public HttpServletResponse getHttpServletResponse() {
return response;
}
@Override
public void onEvent(CometEvent event) throws IOException {
log.info("onEvent called");
SessionManager.setSession(session);
final Comet comet = session.getComet();
final Pushable pushable = comet.getPushable();
pushable.reset();
pushable.write(response, event.attachment());
event.getCometContext().resumeCometHandler(this);
}
@Override
public void onInitialize(CometEvent event) throws IOException {
log.info("onInitialize called");
}
@Override
public void onTerminate(CometEvent event) throws IOException {
log.info("onTerminate called");
}
@Override
public void onInterrupt(CometEvent event) throws IOException {
log.info("onInterrupt called");
SessionManager.setSession(session);
final Comet comet = session.getComet();
final Pushable pushable = comet.getPushable();
synchronized (pushable) {
pushable.reset();
pushable.reconnect();
}
}
}