package com.sun.grizzly.samples.comet; import java.io.IOException; import java.io.PrintWriter; import java.util.concurrent.atomic.AtomicInteger; import java.util.*; import javax.servlet.RequestDispatcher; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.sun.grizzly.comet.CometContext; import com.sun.grizzly.comet.CometEngine; import com.sun.grizzly.comet.CometEvent; import com.sun.grizzly.comet.CometHandler; public class MyCometServlet extends HttpServlet { private class CometMsgHandler implements CometHandler { private HttpServletResponse response; public void onEvent(CometEvent event) throws IOException { if (CometEvent.NOTIFY == event.getType()) { PrintWriter writer = response.getWriter(); writer.write((String)event.attachment()); writer.flush(); } } 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(); } } private static final long serialVersionUID = 1L; @Override public void init(ServletConfig config) throws ServletException { } @Override protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { doPost(req, res); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { String contextPath = req.getParameter("client"); String message = req.getParameter("message"); CometEngine engine = CometEngine.getEngine(); if (message == null) { if (contextPath != null) { CometContext cc = engine.getCometContext(contextPath); if (cc == null) { cc = engine.register(contextPath); // how long to hold client cc.setExpirationDelay(30000 * 1000); CometMsgHandler handler = new CometMsgHandler(); handler.attach(res); cc.addCometHandler(handler); // to fix cc.notify("init ..."); } } } else { CometContext cc = engine.getCometContext(contextPath); if (cc != null) { cc.notify(message); } } } }