You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2006/09/13 02:48:21 UTC

svn commit: r442776 - /tomcat/tc6.0.x/trunk/webapps/examples/WEB-INF/classes/chat/ChatServlet.java

Author: remm
Date: Tue Sep 12 17:48:21 2006
New Revision: 442776

URL: http://svn.apache.org/viewvc?view=rev&rev=442776
Log:
- Chat example using the new API.

Modified:
    tomcat/tc6.0.x/trunk/webapps/examples/WEB-INF/classes/chat/ChatServlet.java

Modified: tomcat/tc6.0.x/trunk/webapps/examples/WEB-INF/classes/chat/ChatServlet.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/webapps/examples/WEB-INF/classes/chat/ChatServlet.java?view=diff&rev=442776&r1=442775&r2=442776
==============================================================================
--- tomcat/tc6.0.x/trunk/webapps/examples/WEB-INF/classes/chat/ChatServlet.java (original)
+++ tomcat/tc6.0.x/trunk/webapps/examples/WEB-INF/classes/chat/ChatServlet.java Tue Sep 12 17:48:21 2006
@@ -23,9 +23,11 @@
 import java.io.PrintWriter;
 import java.util.ArrayList;
 
-import org.apache.catalina.servlets.CometServlet;
+import org.apache.catalina.CometEvent;
+import org.apache.catalina.CometProcessor;
 
 import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
@@ -34,7 +36,7 @@
  * Helper class to implement Comet functionality.
  */
 public class ChatServlet
-    extends CometServlet {
+    extends HttpServlet implements CometProcessor {
 
     protected ArrayList<HttpServletResponse> connections = 
         new ArrayList<HttpServletResponse>();
@@ -54,9 +56,59 @@
         messageSender = null;
     }
 
-    public void begin(HttpServletRequest request, HttpServletResponse response)
+    /**
+     * Process the given Comet event.
+     * 
+     * @param event The Comet event that will be processed
+     * @throws IOException
+     * @throws ServletException
+     */
+    public void event(CometEvent event)
+        throws IOException, ServletException {
+
+        // Note: There should really be two servlets in this example, to avoid
+        // mixing Comet stuff with regular connection processing
+        HttpServletRequest request = event.getHttpServletRequest();
+        HttpServletResponse response = event.getHttpServletResponse();
+        
+        if (event.getEventType() == CometEvent.EventType.BEGIN) {
+            String action = request.getParameter("action");
+            if (action != null) {
+                if ("login".equals(action)) {
+                    String nickname = request.getParameter("nickname");
+                    request.getSession(true).setAttribute("nickname", nickname);
+                    response.sendRedirect("post.jsp");
+                    event.close();
+                    return;
+                } else {
+                    String nickname = (String) request.getSession(true).getAttribute("nickname");
+                    String message = request.getParameter("message");
+                    messageSender.send(nickname, message);
+                    response.sendRedirect("post.jsp");
+                    event.close();
+                    return;
+                }
+            } else {
+                if (request.getSession(true).getAttribute("nickname") == null) {
+                    // Redirect to "login"
+                    log("Redirect to login for session: " + request.getSession(true).getId());
+                    response.sendRedirect("login.jsp");
+                    event.close();
+                    return;
+                }
+            }
+            begin(event, request, response);
+        } else if (event.getEventType() == CometEvent.EventType.ERROR) {
+            error(event, request, response);
+        } else if (event.getEventType() == CometEvent.EventType.END) {
+            end(event, request, response);
+        } else if (event.getEventType() == CometEvent.EventType.READ) {
+            read(event, request, response);
+        }
+    }
+
+    protected void begin(CometEvent event, HttpServletRequest request, HttpServletResponse response)
         throws IOException, ServletException {
-        super.begin(request, response);
         log("Begin for session: " + request.getSession(true).getId());
         
         PrintWriter writer = response.getWriter();
@@ -69,9 +121,8 @@
         }
     }
     
-    public void end(HttpServletRequest request, HttpServletResponse response)
+    protected void end(CometEvent event, HttpServletRequest request, HttpServletResponse response)
         throws IOException, ServletException {
-        super.end(request, response);
         log("End for session: " + request.getSession(true).getId());
         synchronized(connections) {
             connections.remove(response);
@@ -80,15 +131,20 @@
         PrintWriter writer = response.getWriter();
         writer.println("</body></html>");
         
+        event.close();
+        
     }
     
-    public void error(HttpServletRequest request, HttpServletResponse response)
+    protected void error(CometEvent event, HttpServletRequest request, HttpServletResponse response)
         throws IOException, ServletException {
         log("Error for session: " + request.getSession(true).getId());
-        end(request, response);
+        synchronized(connections) {
+            connections.remove(response);
+        }
+        event.close();
     }
     
-    public boolean read(HttpServletRequest request, HttpServletResponse response)
+    protected void read(CometEvent event, HttpServletRequest request, HttpServletResponse response)
         throws IOException, ServletException {
         InputStream is = request.getInputStream();
         byte[] buf = new byte[512];
@@ -98,35 +154,20 @@
                 log("Read " + n + " bytes: " + new String(buf, 0, n) 
                         + " for session: " + request.getSession(true).getId());
             } else if (n < 0) {
-                return false;
+                error(event, request, response);
+                return;
             }
         } while (is.available() > 0);
-        return true;
     }
 
     protected void service(HttpServletRequest request, HttpServletResponse response)
         throws IOException, ServletException {
-        String action = request.getParameter("action");
-        if (action != null) {
-            if ("login".equals(action)) {
-                String nickname = request.getParameter("nickname");
-                request.getSession(true).setAttribute("nickname", nickname);
-                response.sendRedirect("post.jsp");
-            } else {
-                String nickname = (String) request.getSession(true).getAttribute("nickname");
-                String message = request.getParameter("message");
-                messageSender.send(nickname, message);
-                response.sendRedirect("post.jsp");
-            }
-        } else {
-            if (request.getSession(true).getAttribute("nickname") == null) {
-                // Redirect to "login"
-                response.sendRedirect("login.jsp");
-            } else {
-                // Request to view the chet, so use Comet
-                super.service(request, response);
-            }
-        }
+        // Compatibility method: equivalent method using the regular connection model
+        PrintWriter writer = response.getWriter();
+        writer.println("<!doctype html public \"-//w3c//dtd html 4.0 transitional//en\">");
+        writer.println("<head><title>JSP Chat</title></head><body bgcolor=\"#FFFFFF\">");
+        writer.println("Chat example only supports Comet processing");
+        writer.println("</body></html>");
     }
     
 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org