Author: fhanik Date: Mon May 28 04:39:15 2007 New Revision: 542208 URL: http://svn.apache.org/viewvc?view=rev&rev=542208 Log: Implement setTimeout using an Action instead of an attribute
Modified: tomcat/trunk/java/org/apache/catalina/connector/CometEventImpl.java tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java tomcat/trunk/java/org/apache/catalina/connector/Request.java tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java Modified: tomcat/trunk/java/org/apache/catalina/connector/CometEventImpl.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/CometEventImpl.java?view=diff&rev=542208&r1=542207&r2=542208 ============================================================================== --- tomcat/trunk/java/org/apache/catalina/connector/CometEventImpl.java (original) +++ tomcat/trunk/java/org/apache/catalina/connector/CometEventImpl.java Mon May 28 04:39:15 2007 @@ -26,6 +26,7 @@ import org.apache.catalina.CometEvent; import org.apache.catalina.util.StringManager; +import org.apache.coyote.ActionCode; public class CometEventImpl implements CometEvent { @@ -121,7 +122,10 @@ public void setTimeout(int timeout) throws IOException, ServletException, UnsupportedOperationException { if (request.getAttribute("org.apache.tomcat.comet.timeout.support") == Boolean.TRUE) { - request.setAttribute("org.apache.tomcat.comet.timeout", new Integer(timeout)); + checkWorkerThread(); + Integer to = new Integer(timeout); + request.action(ActionCode.ACTION_COMET_TIMEOUT,to); + //request.setAttribute("org.apache.tomcat.comet.timeout", to); } else { throw new UnsupportedOperationException(); } @@ -137,6 +141,10 @@ public void configure(CometEvent.CometConfiguration... options) throws IOException, IllegalStateException { + checkWorkerThread(); + if (getEventType()!=EventType.BEGIN) { + throw new IllegalStateException("Configure can only be called during the BEGIN event."); + } throw new UnsupportedOperationException(); } @@ -164,6 +172,16 @@ throw new UnsupportedOperationException(); } + public String toString() { + StringBuffer buf = new StringBuffer("CometEventImpl["); + buf.append(super.toString()); + buf.append("] Event:"); + buf.append(getEventType()); + buf.append(" SubType:"); + buf.append(getEventSubType()); + return buf.toString(); + } + protected void setWorkerThread() { threadCheck.set(threadCheckHolder); } Modified: tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java?view=diff&rev=542208&r1=542207&r2=542208 ============================================================================== --- tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java (original) +++ tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java Mon May 28 04:39:15 2007 @@ -263,13 +263,14 @@ // request parameters req.getRequestProcessor().setWorkerThreadName(Thread.currentThread().getName()); if (postParseRequest(req, request, res, response)) { + event = request.getEvent(); + if ( event!=null && (event instanceof CometEventImpl)) + ((CometEventImpl)event).setWorkerThread(); + // Calling the container connector.getContainer().getPipeline().getFirst().invoke(request, response); if (request.isComet()) { - event = request.getEvent(); - if ( event!=null && (event instanceof CometEventImpl)) - ((CometEventImpl)event).setWorkerThread(); if (!response.isClosed() && !response.isError()) { if (request.getAvailable()) { Modified: tomcat/trunk/java/org/apache/catalina/connector/Request.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/Request.java?view=diff&rev=542208&r1=542207&r2=542208 ============================================================================== --- tomcat/trunk/java/org/apache/catalina/connector/Request.java (original) +++ tomcat/trunk/java/org/apache/catalina/connector/Request.java Mon May 28 04:39:15 2007 @@ -2259,6 +2259,9 @@ // ------------------------------------------------------ Protected Methods + protected void action(ActionCode actionCode, Object param) { + coyoteRequest.action(actionCode,param); + } protected Session doGetSession(boolean create) { Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java?view=diff&rev=542208&r1=542207&r2=542208 ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java Mon May 28 04:39:15 2007 @@ -1218,6 +1218,14 @@ request.setAvailable(inputBuffer.available()); } else if (actionCode == ActionCode.ACTION_COMET_BEGIN) { comet = true; + } else if (actionCode == ActionCode.ACTION_COMET_TIMEOUT) { + if ( socket == null ) + throw new IllegalStateException("Connection must be in Comet state to set the timeout"); + NioEndpoint.KeyAttachment attach = (NioEndpoint.KeyAttachment)socket.getAttachment(false); + if ( param == null || (!(param instanceof Integer)) ) + throw new IllegalArgumentException("Action parameter must be an Integer object to set the timeout"); + Integer to = (Integer)param; + attach.setTimeout(to.longValue()); } else if (actionCode == ActionCode.ACTION_COMET_END) { comet = false; } Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java?view=diff&rev=542208&r1=542207&r2=542208 ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java Mon May 28 04:39:15 2007 @@ -661,6 +661,7 @@ } } else { if (log.isDebugEnabled()) log.debug("Keeping processor["+result); + //add correct poller events here based on Comet stuff socket.getPoller().add(socket); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]