Author: remm Date: Tue May 29 17:17:11 2007 New Revision: 542701 URL: http://svn.apache.org/viewvc?view=rev&rev=542701 Log: - More plumbing code. So far, the API looks fine to expose the needed functionality.
Modified: tomcat/sandbox/comet/java/org/apache/catalina/connector/CometEventImpl.java tomcat/sandbox/comet/java/org/apache/coyote/http11/Http11AprProcessor.java tomcat/sandbox/comet/java/org/apache/coyote/http11/Http11AprProtocol.java tomcat/sandbox/comet/java/org/apache/tomcat/util/net/AprEndpoint.java Modified: tomcat/sandbox/comet/java/org/apache/catalina/connector/CometEventImpl.java URL: http://svn.apache.org/viewvc/tomcat/sandbox/comet/java/org/apache/catalina/connector/CometEventImpl.java?view=diff&rev=542701&r1=542700&r2=542701 ============================================================================== --- tomcat/sandbox/comet/java/org/apache/catalina/connector/CometEventImpl.java (original) +++ tomcat/sandbox/comet/java/org/apache/catalina/connector/CometEventImpl.java Tue May 29 17:17:11 2007 @@ -19,14 +19,12 @@ package org.apache.catalina.connector; import java.io.IOException; -import java.util.HashSet; -import javax.servlet.ServletException; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.catalina.CometEvent; import org.apache.catalina.util.StringManager; -import org.apache.coyote.ActionCode; public class CometEventImpl implements CometEvent { @@ -132,7 +130,7 @@ * may be requested by using the sendNotify method */ public void configure(boolean read, boolean write) { - + request.configure(read, write); } /** @@ -143,7 +141,7 @@ * will be sent to the servlet */ public void callback(boolean write) { - + request.callback(write); } public String toString() { Modified: tomcat/sandbox/comet/java/org/apache/coyote/http11/Http11AprProcessor.java URL: http://svn.apache.org/viewvc/tomcat/sandbox/comet/java/org/apache/coyote/http11/Http11AprProcessor.java?view=diff&rev=542701&r1=542700&r2=542701 ============================================================================== --- tomcat/sandbox/comet/java/org/apache/coyote/http11/Http11AprProcessor.java (original) +++ tomcat/sandbox/comet/java/org/apache/coyote/http11/Http11AprProcessor.java Tue May 29 17:17:11 2007 @@ -317,9 +317,29 @@ */ protected String server = null; + + protected int cometTimeout = -1; + protected boolean readNotifications = true; + protected boolean writeNotifications = false; + // ------------------------------------------------------------- Properties + + public boolean getReadNotifications() { + return readNotifications; + } + + + public boolean getWriteNotifications() { + return readNotifications; + } + + + public int getCometTimeout() { + return cometTimeout; + } + /** * Return compression level. @@ -686,8 +706,8 @@ /** * Set the upload timeout. */ - public void setTimeout( int timeouts ) { - timeout = timeouts ; + public void setTimeout(int timeout) { + this.timeout = timeout; } /** @@ -1199,6 +1219,15 @@ comet = true; } else if (actionCode == ActionCode.ACTION_COMET_END) { comet = false; + } else if (actionCode == ActionCode.ACTION_COMET_READ_NOTIFICATIONS) { + readNotifications = ((Boolean) param).booleanValue(); + } else if (actionCode == ActionCode.ACTION_COMET_WRITE_NOTIFICATIONS) { + writeNotifications = ((Boolean) param).booleanValue(); + // FIXME: If true, should switch to non blocking mode for the socket + } else if (actionCode == ActionCode.ACTION_COMET_CALLBACK) { + endpoint.getCometPoller().add(socket, timeout, false, ((Boolean) param).booleanValue()); + } else if (actionCode == ActionCode.ACTION_COMET_TIMEOUT) { + cometTimeout = ((Integer) param).intValue(); } } Modified: tomcat/sandbox/comet/java/org/apache/coyote/http11/Http11AprProtocol.java URL: http://svn.apache.org/viewvc/tomcat/sandbox/comet/java/org/apache/coyote/http11/Http11AprProtocol.java?view=diff&rev=542701&r1=542700&r2=542701 ============================================================================== --- tomcat/sandbox/comet/java/org/apache/coyote/http11/Http11AprProtocol.java (original) +++ tomcat/sandbox/comet/java/org/apache/coyote/http11/Http11AprProtocol.java Tue May 29 17:17:11 2007 @@ -563,7 +563,8 @@ proto.endpoint.getPoller().add(socket); } } else { - proto.endpoint.getCometPoller().add(socket); + proto.endpoint.getCometPoller().add(socket, result.getCometTimeout(), + result.getReadNotifications(), false); } } } @@ -587,7 +588,8 @@ // processed by this thread will use either a new or a recycled // processor. connections.put(socket, processor); - proto.endpoint.getCometPoller().add(socket); + proto.endpoint.getCometPoller().add(socket, processor.getCometTimeout(), + processor.getReadNotifications(), false); } else { recycledProcessors.offer(processor); } Modified: tomcat/sandbox/comet/java/org/apache/tomcat/util/net/AprEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/sandbox/comet/java/org/apache/tomcat/util/net/AprEndpoint.java?view=diff&rev=542701&r1=542700&r2=542701 ============================================================================== --- tomcat/sandbox/comet/java/org/apache/tomcat/util/net/AprEndpoint.java (original) +++ tomcat/sandbox/comet/java/org/apache/tomcat/util/net/AprEndpoint.java Tue May 29 17:17:11 2007 @@ -1240,6 +1240,42 @@ } } + // FIXME: Maybe CometPoller extends Poller could make some sense + /** + * Add specified socket and associated pool to the poller. The socket will + * be added to a temporary array, and polled first after a maximum amount + * of time equal to pollTime (in most cases, latency will be much lower, + * however). Note: If both read and write are false, the socket will only + * be checked for timeout; if the socket was already present in the poller, + * a callback event will be generated and the socket will be removed from the + * poller. + * + * @param socket to add to the poller + * @param timeout to use for this connection + * @param read to do read polling + * @param write to do write polling + */ + public void add(long socket, int timeout, boolean read, boolean write) { + // FIXME: Implement. At the moment, no support for both read and write polling, although + // there's no problem in theory. + synchronized (this) { + // Add socket to the list. Newly added sockets will wait + // at most for pollTime before being polled + if (addCount >= addS.length) { + // Can't do anything: close the socket right away + if (comet) { + processSocket(socket, SocketStatus.ERROR); + } else { + Socket.destroy(socket); + } + return; + } + addS[addCount] = socket; + addCount++; + this.notify(); + } + } + /** * The background thread that listens for incoming TCP/IP connections and * hands them off to an appropriate processor. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]