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

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




© 2015 - 2024 Weber Informatics LLC | Privacy Policy