org.wings.comet.GlassfishPushable Maven / Gradle / Ivy
package org.wings.comet;
import org.glassfish.grizzly.comet.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.wings.session.Session;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
class GlassfishPushable extends Pushable {
private static final transient Logger log = LoggerFactory.getLogger(GlassfishPushable.class);
private final GlassfishCometHandler handler;
private int handlerID;
public GlassfishPushable(Session session) {
super(session);
handler = new GlassfishCometHandler(session);
}
@Override
void setPushInfo(Object o) {
log.info("setting push info");
handler.attach((HttpServletResponse)o);
CometEngine engine = CometEngine.getEngine();
CometContext context = engine.getCometContext(CometWingServlet.HANGING_PATH);
handlerID = context.addCometHandler(handler);
super.setPushInfo(this);
}
@Override
public void push() {
log.info("push called in Pushable");
setValid(false);
notifyHandler(REQUEST_UPDATES);
}
@Override
void reconnect() {
log.info("reconnect called in Pushable");
//setValid(false);
//notifyHandler(RECONNECT);
write(handler.getHttpServletResponse(), RECONNECT);
}
@Override
void disconnect() {
log.info("disconnect called in Pushable");
setValid(false);
notifyHandler(DISCONNECT);
}
private void notifyHandler(Object o) {
CometEngine engine = CometEngine.getEngine();
CometContext context = engine.getCometContext(CometWingServlet.HANGING_PATH);
try {
context.notify(o, CometEvent.Type.NOTIFY, handler);
} catch (IOException e) {
e.printStackTrace();
reset();
}
}
}