package com.sun.grizzly.samples; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import com.sun.grizzly.comet.CometContext; import com.sun.grizzly.comet.CometEngine; import com.sun.grizzly.comet.CometEvent; import com.sun.grizzly.comet.CometHandler; import java.util.concurrent.atomic.AtomicInteger; public class CometCount extends HttpServlet { private final AtomicInteger counter = new AtomicInteger(); private class CounterHandler implements CometHandler { private HttpServletResponse response; public void onEvent(CometEvent event) throws IOException { if (CometEvent.NOTIFY == event.getType()) { int count = counter.get(); PrintWriter writer = response.getWriter(); writer.write("\n"); writer.flush(); //event.getCometContext().resumeCometHandler(this); } } public void onInitialize(CometEvent event) throws IOException { } public void onInterrupt(CometEvent event) throws IOException { removeThisFromContext(); } public void onTerminate(CometEvent event) throws IOException { removeThisFromContext(); } public void attach(HttpServletResponse attachment) { this.response = attachment; } private void removeThisFromContext() throws IOException { response.getWriter().close(); CometContext context = CometEngine.getEngine().getCometContext(contextPath); context.removeCometHandler(this); } } private static final long serialVersionUID = 1L; private String contextPath = null; @Override public void init(ServletConfig config) throws ServletException { super.init(config); ServletContext context = config.getServletContext(); contextPath = context.getContextPath() + "/MyComet"; CometEngine engine = CometEngine.getEngine(); CometContext cometContext = engine.register(contextPath); cometContext.setExpirationDelay(120 * 1000); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { CounterHandler handler = new CounterHandler(); handler.attach(res); CometEngine engine = CometEngine.getEngine(); CometContext context = engine.getCometContext(contextPath); context.addCometHandler(handler); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { counter.incrementAndGet(); CometEngine engine = CometEngine.getEngine(); CometContext context = engine.getCometContext(contextPath); context.notify(null); } }