All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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();
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy