Author: remm
Date: Sat Sep  9 14:18:08 2006
New Revision: 441860

URL: http://svn.apache.org/viewvc?view=rev&rev=441860
Log:
- Add the new CometEvent interface, as discussed.
- Merge my comments from CometProcessor.

Added:
    tomcat/tc6.0.x/trunk/java/org/apache/catalina/CometEvent.java   (with props)

Added: tomcat/tc6.0.x/trunk/java/org/apache/catalina/CometEvent.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/CometEvent.java?view=auto&rev=441860
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/CometEvent.java (added)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/CometEvent.java Sat Sep  9 
14:18:08 2006
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+package org.apache.catalina;
+
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * The CometEvent interface.
+ * 
+ * @author Filip Hanik
+ */
+public interface CometEvent {
+
+    /**
+     * Enumeration describing the major events that the container can invoke 
+     * the CometProcessors event() method with
+     * BEGIN - will be called by the main service method of the servlet at the 
beginning 
+     *  of the processing of the connection. It can be used to initialize any 
relevant 
+     *  fields using the request and response objects. Between the end of the 
processing 
+     *  of this event, and the beginning of the processing of the end or error 
events,
+     *  it is possible to use the response object to write data on the open 
connection.
+     *  Note that the response object and depedent OutputStream and Writer are 
still 
+     *  not synchronized, so when they are accessed by multiple threads, 
+     *  synchronization is mandatory.
+     * READ - This indicates that input data is available, and that one read 
can be made
+     *  without blocking. The available and ready methods of the InputStream or
+     *  Reader may be used to determine if there is a risk of blocking: the 
servlet
+     *  should read while data is reported available, and can make one 
additional read
+     *  without blocking. When encountering a read error or an EOF, the 
servlet MUST
+     *  report it by either returning false or throwing an exception such as 
an 
+     *  IOException. This will cause the error event to be invoked, and the 
connection
+     *  will be closed. It is not allowed to attempt reading data from the 
request object
+     *  outside of the execution of this method.
+     * END - End may be called to end the processing of the request. Fields 
that have
+     *  been initialized in the begin method should be reset. After this event 
has
+     *  been processed, the request and response objects, as well as all their 
dependent
+     *  objects will be recycled and used to process other requests.
+     * ERROR - Error will be called by the container in the case where an IO 
exception
+     *  or a similar unrecoverable error occurs on the connection. Fields that 
have
+     *  been initialized in the begin method should be reset. After this event 
has
+     *  been processed, the request and response objects, as well as all their 
dependent
+     *  objects will be recycled and used to process other requests.
+     */
+    enum EventType {BEGIN, READ, END, ERROR}
+    
+    
+    /**
+     * Event details
+     * TIMEOUT - the connection timed out (sub type of ERROR)
+     * CLIENT_DISCONNECT - the client connection was closed (sub type of ERROR)
+     * IOEXCEPTION - an IO exception occurred, such as invalid content, for 
example, an invalid chunk block (sub type of ERROR)
+     * WEBAPP_RELOAD - the webapplication is being reloaded (sub type of END)
+     * SERVER_SHUTDOWN - the server is shutting down (sub type of END)
+     * SESSION_END - the servlet ended the session (sub type of END)
+     */
+    enum EventSubType { TIMEOUT, CLIENT_DISCONNECT, IOEXCEPTION, 
WEBAPP_RELOAD, SERVER_SHUTDOWN, SESSION_END }
+    
+    
+    /**
+     * Returns the HttpServletRequest or the last HttpServletRequestWrapper if 
a filter was applied
+     * @return HttpServletRequest
+     */
+    public HttpServletRequest getHttpServletRequest();
+    
+    /**
+     * Returns the HttpServletResponse or the last HttpServletResponseWrapper
+     * @return HttpServletResponse
+     */
+    public HttpServletResponse getHttpServletResponse();
+    
+    /**
+     * Returns the event type
+     * @return EventType
+     */
+    public EventType getEventType();
+    
+    /**
+     * Returns 
+     * @return EventSubType
+     */
+    public EventSubType getEventSubType();
+    
+    /**
+     * Ends the Comet session. This signals to the container that 
+     * the container wants to end the comet session.
+     * The container may invoke event(CometEvent.END) synchronously or 
asynchronously
+     * @throws IOException if an IO exception occurs
+     */
+    public void close() throws IOException;
+    
+    /**
+     * Sets the timeout for this Comet connection. Please NOTE, that the 
implementation 
+     * of a per connection timeout is OPTIONAL and MAY NOT be implemented.<br/>
+     * This method sets the timeout in milliseconds of idle time on the 
connection.
+     * The timeout is reset every time data is received from the connection or 
data is flushed
+     * using <code>response.flushBuffer()</code>. If a timeout occurs, the 
+     * <code>error(HttpServletRequest, HttpServletResponse)</code> method is 
invoked. The 
+     * web application SHOULD NOT attempt to reuse the request and response 
objects after a timeout
+     * as the <code>error(HttpServletRequest, HttpServletResponse)</code> 
method indicates.<br/>
+     * This method should not be called asynchronously, as that will have no 
effect.
+     * @param timeout The timeout in milliseconds for this connection, must be 
a positive value, larger than 0
+     * @throws IOException An IOException may be thrown to indicate an IO 
error, 
+     *         or that the EOF has been reached on the connection
+     * @throws ServletException An exception has occurred, as specified by the 
root
+     *         cause
+     * @throws UnsupportedOperationException if per connection timeout is not 
supported, either at all or at this phase
+     *         of the invocation.
+     */
+    public void setTimeout(int timeout)
+        throws IOException, ServletException, UnsupportedOperationException;
+
+}

Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/CometEvent.java
------------------------------------------------------------------------------
    svn:eol-style = native



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to