You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by tr...@apache.org on 2005/11/15 16:23:06 UTC
svn commit: r344376 - in /directory/network/trunk/src:
java/org/apache/mina/common/ java/org/apache/mina/common/support/
java/org/apache/mina/transport/socket/nio/support/
java/org/apache/mina/transport/vmpipe/support/ test/org/apache/mina/common/
Author: trustin
Date: Tue Nov 15 07:22:54 2005
New Revision: 344376
URL: http://svn.apache.org/viewcvs?rev=344376&view=rev
Log:
* Removed a parameter from CloseFuture.setClosed() because it is always closed
* Pulled up common code in IoSession implementations to BaseIoSession
Modified:
directory/network/trunk/src/java/org/apache/mina/common/CloseFuture.java
directory/network/trunk/src/java/org/apache/mina/common/support/BaseIoSession.java
directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java
directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/DatagramSessionManagerFilterChain.java
directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/SocketSessionImpl.java
directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionImpl.java
directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionManagerFilterChain.java
directory/network/trunk/src/test/org/apache/mina/common/FutureTest.java
Modified: directory/network/trunk/src/java/org/apache/mina/common/CloseFuture.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/CloseFuture.java?rev=344376&r1=344375&r2=344376&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/common/CloseFuture.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/common/CloseFuture.java Tue Nov 15 07:22:54 2005
@@ -55,8 +55,8 @@
* This method is invoked by MINA internally. Please do not call this method
* directly.
*/
- public void setClosed( boolean closed )
+ public void setClosed()
{
- setValue( closed? Boolean.TRUE : Boolean.FALSE );
+ setValue( Boolean.TRUE );
}
}
Modified: directory/network/trunk/src/java/org/apache/mina/common/support/BaseIoSession.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/support/BaseIoSession.java?rev=344376&r1=344375&r2=344376&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/common/support/BaseIoSession.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/common/support/BaseIoSession.java Tue Nov 15 07:22:54 2005
@@ -22,10 +22,13 @@
import java.util.Map;
import java.util.Set;
+import org.apache.mina.common.CloseFuture;
import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.IoSession;
import org.apache.mina.common.IoSessionManager;
import org.apache.mina.common.TrafficMask;
+import org.apache.mina.common.WriteFuture;
+import org.apache.mina.common.IoFilter.WriteRequest;
/**
* Base implementation of {@link IoSession}.
@@ -38,6 +41,18 @@
private final Map attributes = new HashMap();
private final long creationTime;
+ /**
+ * A lock object which is acquired when {@link IoSession#close()},
+ * {@link #isClosing()}, or {@link IoSession#write(Object)} is invoked.
+ */
+ protected final Object ioLock = new Object();
+
+ /**
+ * A future that will be set 'closed' when the connection is closed.
+ */
+ protected final CloseFuture closeFuture = new CloseFuture();
+ private boolean closing;
+
// Configuration variables
private int idleTimeForRead;
private int idleTimeForWrite;
@@ -68,6 +83,71 @@
lastIdleTimeForBoth = lastIdleTimeForRead = lastIdleTimeForWrite =
System.currentTimeMillis();
}
+
+ public boolean isConnected()
+ {
+ return !closeFuture.isClosed();
+ }
+
+ public boolean isClosing()
+ {
+ synchronized( ioLock )
+ {
+ return closing;
+ }
+ }
+
+ public CloseFuture close()
+ {
+ synchronized( ioLock )
+ {
+ if( !closing )
+ {
+ closing = true;
+ close0( closeFuture );
+ }
+ }
+
+ return closeFuture;
+
+ }
+
+ /**
+ * Implement this method to perform real close operation.
+ *
+ * @param closeFuture a future that should be set to 'closed'
+ */
+ protected void close0( CloseFuture closeFuture )
+ {
+ closeFuture.setClosed();
+ }
+
+ public WriteFuture write( Object message )
+ {
+ WriteFuture future = new WriteFuture();
+ synchronized( ioLock )
+ {
+ if( isClosing() )
+ {
+ future.setWritten( false );
+ }
+ else
+ {
+ write0( new WriteRequest( message, future ) );
+ }
+ }
+ return future;
+ }
+
+ /**
+ * Implement this method to perform real write operation with
+ * the specified <code>writeRequest</code>.
+ */
+ protected void write0( WriteRequest writeRequest )
+ {
+ writeRequest.getFuture().setWritten( false );
+ }
+
public Object getAttachment()
{
Modified: directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java?rev=344376&r1=344375&r2=344376&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java Tue Nov 15 07:22:54 2005
@@ -28,7 +28,6 @@
import org.apache.mina.common.IoHandler;
import org.apache.mina.common.IoSession;
import org.apache.mina.common.TransportType;
-import org.apache.mina.common.WriteFuture;
import org.apache.mina.common.IoFilter.WriteRequest;
import org.apache.mina.common.support.BaseIoSession;
import org.apache.mina.common.support.IoSessionFilterChain;
@@ -50,11 +49,8 @@
private final Queue writeRequestQueue;
private final IoHandler handler;
private final SocketAddress localAddress;
- private final Object ioLock = new Object();
private SocketAddress remoteAddress;
private SelectionKey key;
- private final CloseFuture closeFuture = new CloseFuture();
- private boolean closing;
/**
* Creates a new instance.
@@ -103,28 +99,12 @@
void notifyClose()
{
- closeFuture.setClosed( true );
+ closeFuture.setClosed();
}
- public CloseFuture close()
+ protected void close0( CloseFuture closeFuture )
{
- synchronized( ioLock )
- {
- if( !closing )
- {
- closing = true;
- managerFilterChain.filterClose( this, closeFuture );
- }
- }
- return closeFuture;
- }
-
- public boolean isClosing()
- {
- synchronized( ioLock )
- {
- return closing;
- }
+ managerFilterChain.filterClose( this, closeFuture );
}
Queue getWriteRequestQueue()
@@ -132,23 +112,11 @@
return writeRequestQueue;
}
- public WriteFuture write( Object message )
+ protected void write0( WriteRequest writeRequest )
{
- WriteFuture future = new WriteFuture();
- synchronized( ioLock )
- {
- if( isClosing() )
- {
- future.setWritten( false );
- }
- else
- {
- filterChain.filterWrite( this, new WriteRequest( message, future ) );
- }
- }
- return future;
+ filterChain.filterWrite( this, writeRequest );
}
-
+
public int getScheduledWriteRequests()
{
synchronized( writeRequestQueue )
Modified: directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/DatagramSessionManagerFilterChain.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/DatagramSessionManagerFilterChain.java?rev=344376&r1=344375&r2=344376&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/DatagramSessionManagerFilterChain.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/DatagramSessionManagerFilterChain.java Tue Nov 15 07:22:54 2005
@@ -45,7 +45,7 @@
}
else
{
- closeFuture.setClosed( true );
+ closeFuture.setClosed();
}
}
}
Modified: directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/SocketSessionImpl.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/SocketSessionImpl.java?rev=344376&r1=344375&r2=344376&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/SocketSessionImpl.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/support/SocketSessionImpl.java Tue Nov 15 07:22:54 2005
@@ -28,7 +28,6 @@
import org.apache.mina.common.IoHandler;
import org.apache.mina.common.IoSession;
import org.apache.mina.common.TransportType;
-import org.apache.mina.common.WriteFuture;
import org.apache.mina.common.IoFilter.WriteRequest;
import org.apache.mina.common.support.BaseIoSession;
import org.apache.mina.common.support.IoSessionFilterChain;
@@ -54,10 +53,7 @@
private final IoHandler handler;
private final SocketAddress remoteAddress;
private final SocketAddress localAddress;
- private final Object ioLock = new Object();
private SelectionKey key;
- private CloseFuture closeFuture = new CloseFuture();
- private boolean closing;
private int readBufferSize = DEFAULT_READ_BUFFER_SIZE;
/**
@@ -115,31 +111,14 @@
void notifyClose()
{
- closeFuture.setClosed( true );
+ closeFuture.setClosed();
}
- public CloseFuture close()
+ protected void close0( CloseFuture closeFuture )
{
- synchronized( ioLock )
- {
- if( !closing )
- {
- closing = true;
- filterChain.filterClose( this, closeFuture );
- }
- }
-
- return closeFuture;
+ filterChain.filterClose( this, closeFuture );
}
- public boolean isClosing()
- {
- synchronized( ioLock )
- {
- return closing;
- }
- }
-
Queue getWriteRequestQueue()
{
return writeRequestQueue;
@@ -153,21 +132,9 @@
}
}
- public WriteFuture write( Object message )
+ protected void write0( WriteRequest writeRequest )
{
- WriteFuture future = new WriteFuture();
- synchronized( ioLock )
- {
- if( isClosing() )
- {
- future.setWritten( false );
- }
- else
- {
- filterChain.filterWrite( this, new WriteRequest( message, future ) );
- }
- }
- return future;
+ filterChain.filterWrite( this, writeRequest );
}
public TransportType getTransportType()
Modified: directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionImpl.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionImpl.java?rev=344376&r1=344375&r2=344376&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionImpl.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionImpl.java Tue Nov 15 07:22:54 2005
@@ -11,7 +11,6 @@
import org.apache.mina.common.IoHandler;
import org.apache.mina.common.IoSession;
import org.apache.mina.common.TransportType;
-import org.apache.mina.common.WriteFuture;
import org.apache.mina.common.IoFilter.WriteRequest;
import org.apache.mina.common.support.BaseIoSession;
import org.apache.mina.common.support.IoSessionFilterChain;
@@ -33,11 +32,8 @@
private final IoHandler handler;
private final IoSessionFilterChain filterChain;
private final VmPipeSessionManagerFilterChain managerFilterChain;
- private final Object ioLock = new Object();
final VmPipeSessionImpl remoteSession;
final Object lock;
- private boolean closing;
- CloseFuture closeFuture = new CloseFuture();
/**
* Constructor for client-side session.
@@ -121,44 +117,20 @@
{
return null;
}
-
- public CloseFuture close()
+
+ CloseFuture getCloseFuture()
{
- synchronized( ioLock )
- {
- if( !closing )
- {
- closing = true;
- managerFilterChain.filterClose( this, closeFuture );
- }
- }
return closeFuture;
}
-
- public boolean isClosing()
+
+ protected void close0( CloseFuture closeFuture )
{
- synchronized( ioLock )
- {
- return closing;
- }
+ managerFilterChain.filterClose( this, closeFuture );
}
-
- public WriteFuture write( Object message )
+ protected void write0( WriteRequest writeRequest )
{
- WriteFuture future = new WriteFuture();
- synchronized( ioLock )
- {
- if( isClosing() )
- {
- future.setWritten( false );
- }
- else
- {
- this.filterChain.filterWrite( this, new WriteRequest( message, future ) );
- }
- }
- return future;
+ this.filterChain.filterWrite( this, writeRequest );
}
public int getScheduledWriteRequests()
@@ -169,11 +141,6 @@
public TransportType getTransportType()
{
return TransportType.VM_PIPE;
- }
-
- public boolean isConnected()
- {
- return !closeFuture.isClosed();
}
public SocketAddress getRemoteAddress()
Modified: directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionManagerFilterChain.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionManagerFilterChain.java?rev=344376&r1=344375&r2=344376&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionManagerFilterChain.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionManagerFilterChain.java Tue Nov 15 07:22:54 2005
@@ -35,14 +35,14 @@
VmPipeSessionImpl s = ( VmPipeSessionImpl ) session;
synchronized( s.lock )
{
- if( !s.closeFuture.isClosed() )
+ if( s.getCloseFuture().isClosed() )
{
- s.remoteSession.closeFuture.setClosed( true );
+ s.remoteSession.getCloseFuture().setClosed();
s.getManagerFilterChain().sessionClosed( session );
s.remoteSession.getManagerFilterChain().sessionClosed( s.remoteSession );
}
}
- closeFuture.setClosed( true );
+ closeFuture.setClosed();
}
}
Modified: directory/network/trunk/src/test/org/apache/mina/common/FutureTest.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/test/org/apache/mina/common/FutureTest.java?rev=344376&r1=344375&r2=344376&view=diff
==============================================================================
--- directory/network/trunk/src/test/org/apache/mina/common/FutureTest.java (original)
+++ directory/network/trunk/src/test/org/apache/mina/common/FutureTest.java Tue Nov 15 07:22:54 2005
@@ -43,22 +43,12 @@
TestThread thread = new TestThread( future );
thread.start();
- future.setClosed( true );
+ future.setClosed();
thread.join();
assertTrue( thread.success );
assertTrue( future.isReady() );
assertTrue( future.isClosed() );
-
- thread = new TestThread( future );
- thread.start();
-
- future.setClosed( false );
- thread.join();
-
- assertTrue( thread.success );
- assertTrue( future.isReady() );
- assertFalse( future.isClosed() );
}
public void testConnectFuture() throws Exception