Author: fhanik
Date: Thu May 31 02:09:04 2007
New Revision: 543091

URL: http://svn.apache.org/viewvc?view=rev&rev=543091
Log:
implement CALLBACK and WRITE events

Modified:
    tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
    tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java

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=543091&r1=543090&r2=543091
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java Thu May 
31 02:09:04 2007
@@ -169,6 +169,26 @@
                             request.getEvent().setEventSubType(null);
                         }
                     }
+                } else if (status == SocketStatus.OPEN_WRITE) {
+                    if (response.isClosed()) {
+                        // The event has been closed asynchronously, so call 
end instead of
+                        // read to cleanup the pipeline
+                        
request.getEvent().setEventType(CometEvent.EventType.END);
+                        request.getEvent().setEventSubType(null);
+                    } else {
+                        
request.getEvent().setEventType(CometEvent.EventType.WRITE);
+                        request.getEvent().setEventSubType(null);
+                    }
+                } else if (status == SocketStatus.OPEN_CALLBACK) {
+                    if (response.isClosed()) {
+                        // The event has been closed asynchronously, so call 
end instead of
+                        // read to cleanup the pipeline
+                        
request.getEvent().setEventType(CometEvent.EventType.END);
+                        request.getEvent().setEventSubType(null);
+                    } else {
+                        
request.getEvent().setEventType(CometEvent.EventType.CALLBACK);
+                        request.getEvent().setEventSubType(null);
+                    }
                 } else if (status == SocketStatus.DISCONNECT) {
                     
request.getEvent().setEventType(CometEvent.EventType.ERROR);
                     
request.getEvent().setEventSubType(CometEvent.EventSubType.CLIENT_DISCONNECT);

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?view=diff&rev=543091&r1=543090&r2=543091
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Thu May 31 
02:09:04 2007
@@ -1515,7 +1515,7 @@
                             //check if thread is available
                             if ( isWorkerAvailable() ) {
                                 //set interest ops to 0 so we don't get 
multiple
-                                //invokations
+                                //invokations for both read and write on 
separate threads
                                 reg(sk, attachment, 0);
                                 //read goes before write
                                 if (sk.isReadable())
@@ -1617,6 +1617,10 @@
                         cancelledKey(key, SocketStatus.ERROR,false); //we 
don't support any keys without attachments
                     } else if ( ka.getError() ) {
                         cancelledKey(key, SocketStatus.ERROR,true);
+                    } else if (ka.getComet() && ka.getCometNotify() ) {
+                        ka.setCometNotify(false);//this will get reset after 
invokation if callback is still in there
+                        reg(key,ka,0);//avoid multiple calls, this gets 
reregistered after invokation
+                        if (!processSocket(ka.getChannel(), 
SocketStatus.OPEN_CALLBACK)) processSocket(ka.getChannel(), 
SocketStatus.DISCONNECT);
                     }else if ((ka.interestOps()&SelectionKey.OP_READ) == 
SelectionKey.OP_READ) {
                         //only timeout sockets that we are waiting for a read 
from
                         long delta = now - ka.getLastAccess();



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

Reply via email to