Author: fhanik Date: Fri Mar 24 07:26:05 2006 New Revision: 388561 URL: http://svn.apache.org/viewcvs?rev=388561&view=rev Log: Using long lifed bytebuffers for sending
Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/nio/NioSender.java Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/nio/NioSender.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/nio/NioSender.java?rev=388561&r1=388560&r2=388561&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/nio/NioSender.java (original) +++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/nio/NioSender.java Fri Mar 24 07:26:05 2006 @@ -59,6 +59,7 @@ * STATE VARIABLES * */ protected ByteBuffer readbuf = null; + protected ByteBuffer writebuf = null; protected byte[] current = null; protected int curPos=0; protected XByteBuffer ackbuf = new XByteBuffer(128,true); @@ -169,7 +170,6 @@ //weve written everything, or we are starting a new package //protect against buffer overwrite int length = current.length-curPos; - ByteBuffer writebuf = ByteBuffer.wrap(current,curPos,length); int byteswritten = socketChannel.write(writebuf); curPos += byteswritten; remaining -= byteswritten; @@ -201,6 +201,12 @@ } else { readbuf.clear(); } + if ( writebuf == null ) { + writebuf = getWriteBuffer(); + } else { + writebuf.clear(); + } + InetSocketAddress addr = new InetSocketAddress(getAddress(),getPort()); if ( socketChannel != null ) throw new IOException("Socket channel has already been established. Connection might be in progress."); socketChannel = SocketChannel.open(); @@ -244,6 +250,7 @@ readbuf = getReadBuffer(); } if ( readbuf != null ) readbuf.clear(); + if ( writebuf != null ) writebuf.clear(); current = null; curPos = 0; ackbuf.clear(); @@ -254,8 +261,16 @@ setConnectTime(-1); } - private ByteBuffer getReadBuffer() { - return (getDirectBuffer()?ByteBuffer.allocateDirect(getRxBufSize()):ByteBuffer.allocate(getRxBufSize())); + private ByteBuffer getReadBuffer() { + return getBuffer(getRxBufSize()); + } + + private ByteBuffer getWriteBuffer() { + return getBuffer(getTxBufSize()); + } + + private ByteBuffer getBuffer(int size) { + return (getDirectBuffer()?ByteBuffer.allocateDirect(size):ByteBuffer.allocate(size)); } /** @@ -266,11 +281,20 @@ * @todo Implement this org.apache.catalina.tribes.tcp.IDataSender method */ public synchronized void setMessage(byte[] data) throws IOException { + setMessage(data,0,data.length); + } + + public synchronized void setMessage(byte[] data,int offset, int length) throws IOException { if ( data != null ) { current = data; remaining = current.length; curPos = 0; ackbuf.clear(); + if ( writebuf != null ) writebuf.clear(); + else writebuf = getBuffer(length); + if ( writebuf.capacity() > length ) writebuf = getBuffer(length); + writebuf.put(data,offset,length); + writebuf.rewind(); if (isConnected()) { socketChannel.register(getSelector(), SelectionKey.OP_WRITE, this); } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]