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]