Author: fhanik Date: Thu Mar 2 08:28:27 2006 New Revision: 382437 URL: http://svn.apache.org/viewcvs?rev=382437&view=rev Log: smaller changes, looks like there is no way to detect if the socket has died if you only do a write
Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/NioSender.java Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/NioSender.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/NioSender.java?rev=382437&r1=382436&r2=382437&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/NioSender.java (original) +++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/NioSender.java Thu Mar 2 08:28:27 2006 @@ -19,16 +19,16 @@ import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.SocketChannel; +import java.util.Arrays; import org.apache.catalina.tribes.ChannelMessage; -import java.nio.channels.SelectionKey; -import java.nio.ByteBuffer; -import org.apache.catalina.tribes.io.XByteBuffer; import org.apache.catalina.tribes.Member; -import java.util.Arrays; import org.apache.catalina.tribes.io.ClusterData; +import org.apache.catalina.tribes.io.XByteBuffer; /** * This class is NOT thread safe and should never be used with more than one thread at a time @@ -59,6 +59,7 @@ protected Selector selector; protected Member destination; + protected SocketChannel socketChannel; /* @@ -76,13 +77,19 @@ } + /** + * State machine to send data + * @param key SelectionKey + * @return boolean + * @throws IOException + */ public boolean process(SelectionKey key) throws IOException { int ops = key.readyOps(); key.interestOps(key.interestOps() & ~ops); if ( key.isConnectable() ) { if ( socketChannel.finishConnect() ) { //we connected, register ourselves for writing - this.connected = true; + connected = true; if ( current != null ) key.interestOps(key.interestOps() | SelectionKey.OP_WRITE); return false; } else { @@ -102,17 +109,18 @@ key.interestOps(key.interestOps()|SelectionKey.OP_WRITE); } } else if ( key.isReadable() ) { - //TODO, HANDLE ACK TIMEOUT-and reconnect boolean readcomplete = read(key); if ( readcomplete ) return true; else key.interestOps(key.interestOps()|SelectionKey.OP_READ); } else { - //unknown state + //unknown state, should never happen log.warn("Data is in unknown state. readyOps="+ops); + throw new IOException("Data is in unknown state. readyOps="+ops); } return false; - } + + protected boolean read(SelectionKey key) throws IOException { //if there is no message here, we are done @@ -295,8 +303,6 @@ public boolean getDirect() { return direct; } - - /** * setAckTimeout * @@ -354,5 +360,4 @@ public void setDirect(boolean directBuffer) { this.direct = directBuffer; } - } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]