Author: fhanik
Date: Tue May 29 11:41:07 2007
New Revision: 542618

URL: http://svn.apache.org/viewvc?view=rev&rev=542618
Log:
implement comet operation notification

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

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=542618&r1=542617&r2=542618
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Tue May 29 
11:41:07 2007
@@ -1239,6 +1239,13 @@
                     if (key != null) {
                         final KeyAttachment att = (KeyAttachment) 
key.attachment();
                         if ( att!=null ) {
+                            //handle callback flag
+                            if (att.getComet() && (interestOps & OP_CALLBACK) 
== OP_CALLBACK ) {
+                                att.setCometNotify(true);
+                            } else {
+                                att.setCometNotify(false);
+                            }
+                            interestOps = (interestOps & 
(~OP_CALLBACK));//remove the callback flag
                             att.access();//to prevent timeout
                             //we are registering the key to start with, reset 
the fairness counter.
                             att.interestOps(interestOps);
@@ -1315,7 +1322,8 @@
         }
         
         public void cometInterest(NioChannel socket) {
-            throw new UnsupportedOperationException();
+            KeyAttachment att = (KeyAttachment)socket.getAttachment(false);
+            add(socket,att.getCometOps());
         }
         
         public void wakeup() {
@@ -1644,6 +1652,9 @@
             readLatch = null;
             if ( writeLatch!=null ) try {for (int i=0; 
i<(int)writeLatch.getCount();i++) writeLatch.countDown();}catch (Exception 
ignore){}
             writeLatch = null;
+            cometNotify = false;
+            cometOps = 0;
+            sendfileData = null;
         }
         
         public void reset() {
@@ -1657,11 +1668,12 @@
         public void access(long access) { lastAccess = access; }
         public void setComet(boolean comet) { this.comet = comet; }
         public boolean getComet() { return comet; }
+        public void setCometNotify(boolean notify) { this.cometNotify = 
notify; }
+        public boolean getCometNotify() { return cometNotify; }
         public void setCometOps(int ops) { this.cometOps = ops; }
         public int getCometOps() { return cometOps; }
         public boolean getCurrentAccess() { return currentAccess; }
         public void setCurrentAccess(boolean access) { currentAccess = access; 
}
-        public Object getMutex() {return mutex;}
         public void setTimeout(long timeout) {this.timeout = timeout;}
         public long getTimeout() {return this.timeout;}
         public boolean getError() { return error; }
@@ -1704,11 +1716,11 @@
         public void setSendfileData(SendfileData sf) { this.sendfileData = sf;}
         public SendfileData getSendfileData() { return this.sendfileData;}
         
-        protected Object mutex = new Object();
         protected long lastAccess = -1;
         protected boolean currentAccess = false;
         protected boolean comet = false;
         protected int cometOps = 0;
+        protected boolean cometNotify = false;
         protected long timeout = -1;
         protected boolean error = false;
         protected NioChannel channel = null;



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

Reply via email to