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]