Author: trustin
Date: Fri Dec 17 20:22:47 2004
New Revision: 122702

URL: http://svn.apache.org/viewcvs?view=rev&rev=122702
Log:
 * Added: WriteBuffer.putAsPossible() which puts as much as possible and 
returns the number of bytes put (similar to write())
 * Improved EchoProtocolHandler to utilize putAsPossible().
Modified:
   
incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/EchoProtocolHandler.java
   
incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/WriteBuffer.java
   
incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/TcpWriteBuffer.java

Modified: 
incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/EchoProtocolHandler.java
Url: 
http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/EchoProtocolHandler.java?view=diff&rev=122702&p1=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/EchoProtocolHandler.java&r1=122701&p2=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/EchoProtocolHandler.java&r2=122702
==============================================================================
--- 
incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/EchoProtocolHandler.java
    (original)
+++ 
incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/EchoProtocolHandler.java
    Fri Dec 17 20:22:47 2004
@@ -61,11 +61,9 @@
         ReadBuffer rb = IoSession.getReadBuffer();
         WriteBuffer wb = IoSession.getWriteBuffer();
 
-        if( rb.remaining() <= wb.remaining() )
-        {
-            wb.put( rb );
-            wb.flush();
+        if (wb.putAsPossible(rb) > 0) {
             rb.signal();
+            wb.flush();
         }
     }
 
@@ -77,11 +75,9 @@
         ReadBuffer rb = IoSession.getReadBuffer();
         WriteBuffer wb = IoSession.getWriteBuffer();
 
-        if( rb.hasRemaining() && rb.remaining() <= wb.remaining() )
-        {
-            wb.put( rb );
-            wb.flush();
+        if (wb.putAsPossible(rb) > 0) {
             rb.signal();
+            wb.flush();
         }
     }
 

Modified: 
incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/WriteBuffer.java
Url: 
http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/WriteBuffer.java?view=diff&rev=122702&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/WriteBuffer.java&r1=122701&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/WriteBuffer.java&r2=122702
==============================================================================
--- 
incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/WriteBuffer.java
 (original)
+++ 
incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/WriteBuffer.java
 Fri Dec 17 20:22:47 2004
@@ -52,6 +52,10 @@
     WriteBuffer put( ByteBuffer buf );
 
     WriteBuffer put( ReadBuffer buf );
+    
+    int putAsPossible(ByteBuffer buf);
+    
+    int putAsPossible(ReadBuffer buf);
 
     WriteBuffer put( byte b );
 

Modified: 
incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/TcpWriteBuffer.java
Url: 
http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/TcpWriteBuffer.java?view=diff&rev=122702&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/TcpWriteBuffer.java&r1=122701&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/TcpWriteBuffer.java&r2=122702
==============================================================================
--- 
incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/TcpWriteBuffer.java
       (original)
+++ 
incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/TcpWriteBuffer.java
       Fri Dec 17 20:22:47 2004
@@ -71,12 +71,7 @@
 
     public WriteBuffer put( ReadBuffer buf )
     {
-        if( ! ( buf instanceof TcpReadBuffer ) )
-        {
-            throw new IllegalArgumentException( "Incompatible buffer type: "
-                                                + buf.getClass() );
-        }
-
+        checkBufferCompatibility( buf );
         this.buf.put( ( ( TcpReadBuffer ) buf ).buf() );
         return this;
     }
@@ -85,6 +80,32 @@
     {
         this.buf.put( buf );
         return this;
+    }
+    
+    public int putAsPossible( ReadBuffer buf ) {
+        checkBufferCompatibility( buf );
+        return this.putAsPossible( ( ( TcpReadBuffer ) buf ).buf() );
+    }
+    
+    public int putAsPossible( ByteBuffer buf ) {
+        int length = this.buf.remaining() < buf.remaining()? 
this.buf.remaining() : buf.remaining();
+        if (length > 0) {
+            int oldLimit = buf.limit();
+            buf.limit(buf.position() + length);
+            this.buf.put(buf);
+            buf.limit(oldLimit);
+        }
+        
+        return length;
+    }
+
+    private void checkBufferCompatibility( ReadBuffer buf )
+    {
+        if( ! ( buf instanceof TcpReadBuffer ) )
+        {
+            throw new IllegalArgumentException( "Incompatible buffer type: "
+                                                + buf.getClass() );
+        }
     }
 
     public WriteBuffer put( byte b )

Reply via email to