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/04/21 09:40:00 UTC
svn commit: r164009 - in /directory/network/trunk/src:
java/org/apache/mina/common/ java/org/apache/mina/io/
java/org/apache/mina/io/datagram/ java/org/apache/mina/io/socket/
java/org/apache/mina/protocol/ java/org/apache/mina/protocol/io/
java/org/apache/mina/protocol/vmpipe/ java/org/apache/mina/util/
test/org/apache/mina/io/ test/org/apache/mina/protocol/
test/org/apache/mina/protocol/codec/
Author: trustin
Date: Thu Apr 21 00:39:58 2005
New Revision: 164009
URL: http://svn.apache.org/viewcvs?rev=164009&view=rev
Log:
* Extracted common methods of IoSession and ProtocolSession to Session
* Added BaseSession that implements Session and made most of Sessions extend it
* Renamed BasicSessionConfig to BaseSessionConfig
* Added user-defined attributes to Session and made attachment a user-defined attribute whose key is "" (empty string)
Added:
directory/network/trunk/src/java/org/apache/mina/common/Session.java (with props)
directory/network/trunk/src/java/org/apache/mina/util/BaseSession.java (with props)
directory/network/trunk/src/java/org/apache/mina/util/BaseSessionConfig.java (with props)
Removed:
directory/network/trunk/src/java/org/apache/mina/util/BasicSessionConfig.java
Modified:
directory/network/trunk/src/java/org/apache/mina/io/IoSession.java
directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSession.java
directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSessionConfig.java
directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSession.java
directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSessionConfig.java
directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSession.java
directory/network/trunk/src/java/org/apache/mina/protocol/io/IoAdapter.java
directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeFilter.java
directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeIdleStatusChecker.java
directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeSession.java
directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeSessionConfig.java
directory/network/trunk/src/test/org/apache/mina/io/IoHandlerFilterChainTest.java
directory/network/trunk/src/test/org/apache/mina/protocol/ProtocolHandlerFilterChainTest.java
directory/network/trunk/src/test/org/apache/mina/protocol/codec/CumulativeProtocolDecoderTest.java
Added: directory/network/trunk/src/java/org/apache/mina/common/Session.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/Session.java?rev=164009&view=auto
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/common/Session.java (added)
+++ directory/network/trunk/src/java/org/apache/mina/common/Session.java Thu Apr 21 00:39:58 2005
@@ -0,0 +1,135 @@
+/*
+ * @(#) $Id$
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.mina.common;
+
+import java.net.SocketAddress;
+import java.util.Set;
+
+/**
+ * A handle which represents connection between two endpoints regardless of
+ * transport types.
+ * <p>
+ * Session provides user-defined attributes. User-defined attributes are
+ * application-specific data which is associated with a session.
+ * It often contains objects that represents the state of a higher-level protocol
+ * and becomes a way to exchange data between filters and handlers.
+ *
+ * @author Trustin Lee (trustin@apache.org)
+ * @version $Rev$, $Date$
+ */
+public interface Session {
+
+ /**
+ * Closes this session immediately.
+ */
+ void close();
+
+ /**
+ * Returns an attachment of this session.
+ * This method is identical with <tt>getAttribute( "" )</tt>.
+ */
+ Object getAttachment();
+
+ /**
+ * Sets an attachment of this session.
+ * This method is identical with <tt>setAttribute( "", attachment )</tt>.
+ *
+ * @return Old attachment. <tt>null</tt> if it is new.
+ */
+ Object setAttachment( Object attachment );
+
+ /**
+ * Returns the value of user-defined attribute of this session.
+ *
+ * @param key the key of the attribute
+ * @return <tt>null</tt> if there is no attribute with the specified key
+ */
+ Object getAttribute( String key );
+
+ /**
+ * Sets a user-defined attribute.
+ *
+ * @param key the key of the attribute
+ * @param value the value of the attribute
+ * @return The old value of the attribute. <tt>null</tt> if it is new.
+ */
+ Object setAttribute( String key, Object value );
+
+ /**
+ * Returns the set of keys of all user-defined attributes.
+ */
+ Set getAttributeKeys();
+
+ /**
+ * Returns transport type of this session.
+ */
+ TransportType getTransportType();
+
+ /**
+ * Returns <code>true</code> if this session is connected with remote peer.
+ */
+ boolean isConnected();
+
+ /**
+ * Returns the configuration of this session.
+ */
+ SessionConfig getConfig();
+
+ /**
+ * Returns the socket address of remote peer.
+ */
+ SocketAddress getRemoteAddress();
+
+ /**
+ * Returns the socket address of local machine which is associated with this
+ * session.
+ */
+ SocketAddress getLocalAddress();
+
+ /**
+ * Returns the total number of bytes which were read from this session.
+ */
+ long getReadBytes();
+
+ /**
+ * Returns the total number of bytes which were written to this session.
+ */
+ long getWrittenBytes();
+
+ /**
+ * Returns the time in millis when I/O occurred lastly.
+ */
+ long getLastIoTime();
+
+ /**
+ * Returns the time in millis when read operation occurred lastly.
+ */
+ long getLastReadTime();
+
+ /**
+ * Returns the time in millis when write operation occurred lastly.
+ */
+ long getLastWriteTime();
+
+ /**
+ * Returns <code>true</code> if this session is idle for the specified
+ * {@link IdleStatus}.
+ */
+ boolean isIdle( IdleStatus status );
+}
Propchange: directory/network/trunk/src/java/org/apache/mina/common/Session.java
------------------------------------------------------------------------------
svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision
Modified: directory/network/trunk/src/java/org/apache/mina/io/IoSession.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/IoSession.java?rev=164009&r1=164008&r2=164009&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/IoSession.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/IoSession.java Thu Apr 21 00:39:58 2005
@@ -18,26 +18,19 @@
*/
package org.apache.mina.io;
-import java.net.SocketAddress;
-
import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.IdleStatus;
-import org.apache.mina.common.SessionConfig;
-import org.apache.mina.common.TransportType;
+import org.apache.mina.common.Session;
/**
- * A handle which represents connection between two endpoints regardless of
- * transport types (UDP/IP and TCP/IP).
- * <p>
- * Session provides an attachment per session ({@link #getAttachment()} and
- * {@link #setAttachment(Object)}). Attachment is an application-specific data
- * which is associated with a session. It is often an object that represents
- * the state of a higher-level protocol.
+ * A {@link Session} that represents low-level I/O connection between two
+ * endpoints regardless of underlying transport types.
*
* @author Trustin Lee (trustin@apache.org)
* @version $Rev$, $Date$
+ *
+ * @see Session
*/
-public interface IoSession
+public interface IoSession extends Session
{
/**
* Returns the event handler for this session.
@@ -45,82 +38,10 @@
IoHandler getHandler();
/**
- * Closes this session immediately.
- */
- void close();
-
- /**
* Writes the content of the specified <code>buf</code>.
* This operation is asynchronous, and you'll get notified by
* {@link IoHandler#dataWritten(IoSession, Object)} event.
* The specified <code>marker</code> will be passes as a parameter.
*/
void write( ByteBuffer buf, Object marker );
-
- /**
- * Returns an attachment of this session.
- */
- Object getAttachment();
-
- /**
- * Sets an attachment of this session.
- */
- void setAttachment( Object attachment );
-
- /**
- * Returns transport type of this session.
- */
- TransportType getTransportType();
-
- /**
- * Returns <code>true</code> if this session is connected with remote peer.
- */
- boolean isConnected();
-
- /**
- * Returns the configuration of this session.
- */
- SessionConfig getConfig();
-
- /**
- * Returns the socket address of remote peer.
- */
- SocketAddress getRemoteAddress();
-
- /**
- * Returns the socket address of local machine which is associated with this
- * session.
- */
- SocketAddress getLocalAddress();
-
- /**
- * Returns the total number of bytes which were read from this session.
- */
- long getReadBytes();
-
- /**
- * Returns the total number of bytes which were written to this session.
- */
- long getWrittenBytes();
-
- /**
- * Returns the time in millis when I/O occurred lastly.
- */
- long getLastIoTime();
-
- /**
- * Returns the time in millis when read operation occurred lastly.
- */
- long getLastReadTime();
-
- /**
- * Returns the time in millis when write operation occurred lastly.
- */
- long getLastWriteTime();
-
- /**
- * Returns <code>true</code> if this session is idle for the specified
- * {@link IdleStatus}.
- */
- boolean isIdle( IdleStatus status );
}
Modified: directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSession.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSession.java?rev=164009&r1=164008&r2=164009&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSession.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSession.java Thu Apr 21 00:39:58 2005
@@ -23,11 +23,11 @@
import java.nio.channels.SelectionKey;
import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.SessionConfig;
import org.apache.mina.common.TransportType;
import org.apache.mina.io.IoHandler;
import org.apache.mina.io.IoSession;
+import org.apache.mina.util.BaseSession;
import org.apache.mina.util.Queue;
/**
@@ -36,7 +36,7 @@
* @author Trustin Lee (trustin@apache.org)
* @version $Rev$, $Date$
*/
-class DatagramSession implements IoSession
+class DatagramSession extends BaseSession implements IoSession
{
private final DatagramFilterChain filters;
@@ -56,22 +56,6 @@
private SelectionKey key;
- private Object attachment;
-
- private long readBytes;
-
- private long writtenBytes;
-
- private long lastReadTime;
-
- private long lastWriteTime;
-
- private boolean idleForBoth;
-
- private boolean idleForRead;
-
- private boolean idleForWrite;
-
/**
* Creates a new instance.
*/
@@ -117,16 +101,6 @@
{
}
- public Object getAttachment()
- {
- return attachment;
- }
-
- public void setAttachment( Object attachment )
- {
- this.attachment = attachment;
- }
-
Queue getWriteBufferQueue()
{
return writeBufferQueue;
@@ -170,69 +144,5 @@
public SocketAddress getLocalAddress()
{
return localAddress;
- }
-
- public long getReadBytes()
- {
- return readBytes;
- }
-
- public long getWrittenBytes()
- {
- return writtenBytes;
- }
-
- void increaseReadBytes( int increment )
- {
- readBytes += increment;
- lastReadTime = System.currentTimeMillis();
- }
-
- void increaseWrittenBytes( int increment )
- {
- writtenBytes += increment;
- lastWriteTime = System.currentTimeMillis();
- }
-
- public long getLastIoTime()
- {
- return Math.max( lastReadTime, lastWriteTime );
- }
-
- public long getLastReadTime()
- {
- return lastReadTime;
- }
-
- public long getLastWriteTime()
- {
- return lastWriteTime;
- }
-
- public boolean isIdle( IdleStatus status )
- {
- if( status == IdleStatus.BOTH_IDLE )
- return idleForBoth;
-
- if( status == IdleStatus.READER_IDLE )
- return idleForRead;
-
- if( status == IdleStatus.WRITER_IDLE )
- return idleForWrite;
-
- throw new IllegalArgumentException( "Unknown idle status: " + status );
- }
-
- void setIdle( IdleStatus status )
- {
- if( status == IdleStatus.BOTH_IDLE )
- idleForBoth = true;
- else if( status == IdleStatus.READER_IDLE )
- idleForRead = true;
- else if( status == IdleStatus.WRITER_IDLE )
- idleForWrite = true;
- else
- throw new IllegalArgumentException( "Unknown idle status: "
- + status );
}
}
Modified: directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSessionConfig.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSessionConfig.java?rev=164009&r1=164008&r2=164009&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSessionConfig.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSessionConfig.java Thu Apr 21 00:39:58 2005
@@ -24,7 +24,7 @@
import org.apache.mina.common.SessionConfig;
import org.apache.mina.io.IoSession;
import org.apache.mina.protocol.ProtocolSession;
-import org.apache.mina.util.BasicSessionConfig;
+import org.apache.mina.util.BaseSessionConfig;
/**
* A {@link SessionConfig} for datagram transport (UDP/IP).
@@ -36,7 +36,7 @@
* @author Trustin Lee (trustin@apache.org)
* @version $Rev$, $Date$,
*/
-public class DatagramSessionConfig extends BasicSessionConfig
+public class DatagramSessionConfig extends BaseSessionConfig
{
private final DatagramChannel ch;
Modified: directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSession.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSession.java?rev=164009&r1=164008&r2=164009&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSession.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSession.java Thu Apr 21 00:39:58 2005
@@ -23,11 +23,11 @@
import java.nio.channels.SocketChannel;
import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.SessionConfig;
import org.apache.mina.common.TransportType;
import org.apache.mina.io.IoHandler;
import org.apache.mina.io.IoSession;
+import org.apache.mina.util.BaseSession;
import org.apache.mina.util.Queue;
/**
@@ -36,7 +36,7 @@
* @author Trustin Lee (trustin@apache.org)
* @version $Rev$, $Date$
*/
-class SocketSession implements IoSession
+class SocketSession extends BaseSession implements IoSession
{
private final SocketFilterChain filters;
@@ -56,22 +56,6 @@
private SelectionKey key;
- private Object attachment;
-
- private long readBytes;
-
- private long writtenBytes;
-
- private long lastReadTime;
-
- private long lastWriteTime;
-
- private boolean idleForBoth;
-
- private boolean idleForRead;
-
- private boolean idleForWrite;
-
/**
* Creates a new instance.
*/
@@ -118,16 +102,6 @@
SocketIoProcessor.getInstance().removeSession( this );
}
- public Object getAttachment()
- {
- return attachment;
- }
-
- public void setAttachment( Object attachment )
- {
- this.attachment = attachment;
- }
-
Queue getWriteBufferQueue()
{
return writeBufferQueue;
@@ -166,69 +140,5 @@
public SocketAddress getLocalAddress()
{
return localAddress;
- }
-
- public long getReadBytes()
- {
- return readBytes;
- }
-
- public long getWrittenBytes()
- {
- return writtenBytes;
- }
-
- void increaseReadBytes( int increment )
- {
- readBytes += increment;
- lastReadTime = System.currentTimeMillis();
- }
-
- void increaseWrittenBytes( int increment )
- {
- writtenBytes += increment;
- lastWriteTime = System.currentTimeMillis();
- }
-
- public long getLastIoTime()
- {
- return Math.max( lastReadTime, lastWriteTime );
- }
-
- public long getLastReadTime()
- {
- return lastReadTime;
- }
-
- public long getLastWriteTime()
- {
- return lastWriteTime;
- }
-
- public boolean isIdle( IdleStatus status )
- {
- if( status == IdleStatus.BOTH_IDLE )
- return idleForBoth;
-
- if( status == IdleStatus.READER_IDLE )
- return idleForRead;
-
- if( status == IdleStatus.WRITER_IDLE )
- return idleForWrite;
-
- throw new IllegalArgumentException( "Unknown idle status: " + status );
- }
-
- void setIdle( IdleStatus status, boolean value )
- {
- if( status == IdleStatus.BOTH_IDLE )
- idleForBoth = value;
- else if( status == IdleStatus.READER_IDLE )
- idleForRead = value;
- else if( status == IdleStatus.WRITER_IDLE )
- idleForWrite = value;
- else
- throw new IllegalArgumentException( "Unknown idle status: "
- + status );
}
}
Modified: directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSessionConfig.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSessionConfig.java?rev=164009&r1=164008&r2=164009&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSessionConfig.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSessionConfig.java Thu Apr 21 00:39:58 2005
@@ -23,7 +23,7 @@
import org.apache.mina.common.SessionConfig;
import org.apache.mina.io.IoSession;
import org.apache.mina.protocol.ProtocolSession;
-import org.apache.mina.util.BasicSessionConfig;
+import org.apache.mina.util.BaseSessionConfig;
/**
* A {@link SessionConfig} for socket transport (TCP/IP).
@@ -35,7 +35,7 @@
* @author Trustin Lee (trustin@apache.org)
* @version $Rev$, $Date$,
*/
-public class SocketSessionConfig extends BasicSessionConfig
+public class SocketSessionConfig extends BaseSessionConfig
{
private static final int DEFAULT_READ_BUFFER_SIZE = 1024;
Modified: directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSession.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSession.java?rev=164009&r1=164008&r2=164009&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSession.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSession.java Thu Apr 21 00:39:58 2005
@@ -18,25 +18,18 @@
*/
package org.apache.mina.protocol;
-import java.net.SocketAddress;
-
-import org.apache.mina.common.IdleStatus;
-import org.apache.mina.common.SessionConfig;
-import org.apache.mina.common.TransportType;
+import org.apache.mina.common.Session;
/**
- * A handle which represents high-level protocol connection between two
+ * A {@link Session} which represents high-level protocol connection between two
* endpoints regardless of underlying transport types.
- * <p>
- * Session provides an attachment per session ({@link #getAttachment()} and
- * {@link #setAttachment(Object)}). Attachment is an application-specific data
- * which is associated with a session. It is often an object that represents
- * the state of a higher-level protocol.
*
* @author Trustin Lee (trustin@apache.org)
* @version $Rev$, $Date$
+ *
+ * @see Session
*/
-public interface ProtocolSession
+public interface ProtocolSession extends Session
{
/**
* Returns the {@link ProtocolHandler} which handles this session.
@@ -54,81 +47,9 @@
ProtocolDecoder getDecoder();
/**
- * Closes the connection immediately.
- */
- void close();
-
- /**
- * Returns an attachment of this session.
- */
- Object getAttachment();
-
- /**
- * Sets an attachment of this session.
- */
- void setAttachment( Object attachment );
-
- /**
* Writes the specified <code>message</code> to remote peer. This operation
* is asynchronous; {@link ProtocolHandler#messageSent(ProtocolSession, Object)}
* will be invoked when the message is actually sent to remote peer.
*/
void write( Object message );
-
- /**
- * Returns transport type of this session.
- */
- TransportType getTransportType();
-
- /**
- * Returns <code>true</code> if this session is connected with remote peer.
- */
- boolean isConnected();
-
- /**
- * Returns the configuration of this session.
- */
- SessionConfig getConfig();
-
- /**
- * Returns the socket address of remote peer.
- */
- SocketAddress getRemoteAddress();
-
- /**
- * Returns the socket address of local machine which is associated with this
- * session.
- */
- SocketAddress getLocalAddress();
-
- /**
- * Returns the total number of bytes which were read from this session.
- */
- long getReadBytes();
-
- /**
- * Returns the total number of bytes which were written to this session.
- */
- long getWrittenBytes();
-
- /**
- * Returns the time in millis when I/O occurred lastly.
- */
- long getLastIoTime();
-
- /**
- * Returns the time in millis when read operation occurred lastly.
- */
- long getLastReadTime();
-
- /**
- * Returns the time in millis when write operation occurred lastly.
- */
- long getLastWriteTime();
-
- /**
- * Returns <code>true</code> if this session is idle for the specified
- * {@link IdleStatus}.
- */
- boolean isIdle( IdleStatus status );
}
Modified: directory/network/trunk/src/java/org/apache/mina/protocol/io/IoAdapter.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/protocol/io/IoAdapter.java?rev=164009&r1=164008&r2=164009&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/protocol/io/IoAdapter.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/protocol/io/IoAdapter.java Thu Apr 21 00:39:58 2005
@@ -19,6 +19,7 @@
package org.apache.mina.protocol.io;
import java.net.SocketAddress;
+import java.util.Set;
import org.apache.mina.common.ByteBuffer;
import org.apache.mina.common.IdleStatus;
@@ -245,8 +246,6 @@
private final ProtocolDecoderOutputImpl decOut;
- private Object attachment;
-
private ProtocolSessionImpl( IoSession session,
SessionHandlerAdapter adapter )
{
@@ -280,12 +279,27 @@
public Object getAttachment()
{
- return attachment;
+ return session.getAttachment();
+ }
+
+ public Object setAttachment( Object attachment )
+ {
+ return session.setAttachment( attachment );
+ }
+
+ public Object getAttribute( String key )
+ {
+ return session.getAttribute( key );
+ }
+
+ public Object setAttribute( String key, Object value )
+ {
+ return session.setAttribute( key, value );
}
- public void setAttachment( Object attachment )
+ public Set getAttributeKeys()
{
- this.attachment = attachment;
+ return session.getAttributeKeys();
}
public void write( Object message )
Modified: directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeFilter.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeFilter.java?rev=164009&r1=164008&r2=164009&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeFilter.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeFilter.java Thu Apr 21 00:39:58 2005
@@ -3,6 +3,7 @@
*/
package org.apache.mina.protocol.vmpipe;
+import org.apache.mina.common.IdleStatus;
import org.apache.mina.protocol.ProtocolHandler;
import org.apache.mina.protocol.ProtocolHandlerFilterAdapter;
import org.apache.mina.protocol.ProtocolSession;
@@ -20,8 +21,9 @@
{
VmPipeSession vps = ( VmPipeSession ) session;
- vps.bothIdle = vps.readerIdle = false;
- vps.lastReadTime = System.currentTimeMillis();
+ vps.setIdle( IdleStatus.BOTH_IDLE, false );
+ vps.setIdle( IdleStatus.READER_IDLE, false );
+ vps.increaseReadBytes( 0 );
// fire messageSent event first
vps.remoteFilters.messageSent( vps.remoteSession, message );
@@ -34,8 +36,9 @@
ProtocolSession session, Object message )
{
VmPipeSession vps = ( VmPipeSession ) session;
- vps.bothIdle = vps.writerIdle = false;
- vps.lastWriteTime = System.currentTimeMillis();
+ vps.setIdle( IdleStatus.BOTH_IDLE, false );
+ vps.setIdle( IdleStatus.WRITER_IDLE, false );
+ vps.increaseWrittenBytes( 0 );
nextHandler.messageSent( session, message );
}
Modified: directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeIdleStatusChecker.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeIdleStatusChecker.java?rev=164009&r1=164008&r2=164009&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeIdleStatusChecker.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeIdleStatusChecker.java Thu Apr 21 00:39:58 2005
@@ -74,37 +74,40 @@
long idleTime;
SessionConfig config = session.getConfig();
- if( !session.bothIdle )
+ if( !session.isIdle( IdleStatus.BOTH_IDLE ) )
{
idleTime = config
.getIdleTimeInMillis( IdleStatus.BOTH_IDLE );
- session.bothIdle = idleTime > 0L
- && ( currentTime - session.lastReadTime ) > idleTime;
- if( session.bothIdle )
+ session.setIdle( IdleStatus.BOTH_IDLE,
+ idleTime > 0L
+ && ( currentTime - session.getLastIoTime() ) > idleTime );
+ if( session.isIdle( IdleStatus.BOTH_IDLE ) )
session.localFilters
.sessionIdle( session,
IdleStatus.BOTH_IDLE );
}
- if( !session.readerIdle )
+ if( !session.isIdle( IdleStatus.READER_IDLE ) )
{
idleTime = config
.getIdleTimeInMillis( IdleStatus.READER_IDLE );
- session.readerIdle = idleTime > 0L
- && ( currentTime - session.lastReadTime ) > idleTime;
- if( session.readerIdle )
+ session.setIdle( IdleStatus.READER_IDLE,
+ idleTime > 0L
+ && ( currentTime - session.getLastReadTime() ) > idleTime );
+ if( session.isIdle( IdleStatus.READER_IDLE ) )
session.localFilters
.sessionIdle( session,
IdleStatus.READER_IDLE );
}
- if( !session.writerIdle )
+ if( !session.isIdle( IdleStatus.WRITER_IDLE ) )
{
idleTime = config
.getIdleTimeInMillis( IdleStatus.WRITER_IDLE );
- session.writerIdle = idleTime > 0L
- && ( currentTime - session.lastReadTime ) > idleTime;
- if( session.writerIdle )
+ session.setIdle( IdleStatus.WRITER_IDLE,
+ idleTime > 0L
+ && ( currentTime - session.getLastWriteTime() ) > idleTime );
+ if( session.isIdle( IdleStatus.WRITER_IDLE ) )
session.localFilters
.sessionIdle( session,
IdleStatus.WRITER_IDLE );
Modified: directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeSession.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeSession.java?rev=164009&r1=164008&r2=164009&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeSession.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeSession.java Thu Apr 21 00:39:58 2005
@@ -5,13 +5,13 @@
import java.net.SocketAddress;
-import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.SessionConfig;
import org.apache.mina.common.TransportType;
import org.apache.mina.protocol.ProtocolDecoder;
import org.apache.mina.protocol.ProtocolEncoder;
import org.apache.mina.protocol.ProtocolHandler;
import org.apache.mina.protocol.ProtocolSession;
+import org.apache.mina.util.BaseSession;
/**
* TODO Document me.
@@ -19,7 +19,7 @@
* @author Trustin Lee (trustin@apache.org)
* @version $Rev$, $Date$
*/
-class VmPipeSession implements ProtocolSession
+class VmPipeSession extends BaseSession implements ProtocolSession
{
private final SocketAddress localAddress;
@@ -35,22 +35,10 @@
final VmPipeSession remoteSession;
- private Object attachment;
-
final Object lock;
boolean closed;
- long lastReadTime;
-
- long lastWriteTime;
-
- boolean bothIdle;
-
- boolean readerIdle;
-
- boolean writerIdle;
-
/**
* Constructor for client-side session.
*/
@@ -117,16 +105,6 @@
}
}
- public Object getAttachment()
- {
- return attachment;
- }
-
- public void setAttachment( Object attachment )
- {
- this.attachment = attachment;
- }
-
public void write( Object message )
{
localFilters.filterWrite( this, message );
@@ -155,45 +133,5 @@
public SocketAddress getLocalAddress()
{
return localAddress;
- }
-
- public long getReadBytes()
- {
- return 0;
- }
-
- public long getWrittenBytes()
- {
- return 0;
- }
-
- public long getLastIoTime()
- {
- return Math.max( lastReadTime, lastWriteTime );
- }
-
- public long getLastReadTime()
- {
- return lastReadTime;
- }
-
- public long getLastWriteTime()
- {
- return lastWriteTime;
- }
-
- public boolean isIdle( IdleStatus status )
- {
- if( status == null )
- throw new NullPointerException( "status" );
-
- if( status == IdleStatus.BOTH_IDLE )
- return bothIdle;
- if( status == IdleStatus.READER_IDLE )
- return readerIdle;
- if( status == IdleStatus.WRITER_IDLE )
- return writerIdle;
-
- throw new IllegalArgumentException( "Illegal statue: " + status );
}
}
Modified: directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeSessionConfig.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeSessionConfig.java?rev=164009&r1=164008&r2=164009&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeSessionConfig.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeSessionConfig.java Thu Apr 21 00:39:58 2005
@@ -4,7 +4,7 @@
package org.apache.mina.protocol.vmpipe;
import org.apache.mina.common.SessionConfig;
-import org.apache.mina.util.BasicSessionConfig;
+import org.apache.mina.util.BaseSessionConfig;
/**
* A {@link SessionConfig} for in-VM pipe transport.
@@ -12,6 +12,6 @@
* @author Trustin Lee (trustin@apache.org)
* @version $Rev$, $Date$
*/
-public class VmPipeSessionConfig extends BasicSessionConfig
+public class VmPipeSessionConfig extends BaseSessionConfig
{
}
Added: directory/network/trunk/src/java/org/apache/mina/util/BaseSession.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/util/BaseSession.java?rev=164009&view=auto
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/util/BaseSession.java (added)
+++ directory/network/trunk/src/java/org/apache/mina/util/BaseSession.java Thu Apr 21 00:39:58 2005
@@ -0,0 +1,153 @@
+/*
+ * @(#) $Id$
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.mina.util;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.mina.common.IdleStatus;
+import org.apache.mina.common.Session;
+
+/**
+ * Base implementation of {@link Session}.
+ *
+ * @author Trustin Lee (trustin@apache.org)
+ * @version $Rev$, $Date$
+ */
+public abstract class BaseSession implements Session
+{
+ private final Map attributes = new HashMap();
+
+ private long readBytes;
+
+ private long writtenBytes;
+
+ private long lastReadTime;
+
+ private long lastWriteTime;
+
+ private boolean idleForBoth;
+
+ private boolean idleForRead;
+
+ private boolean idleForWrite;
+
+
+ protected BaseSession()
+ {
+ }
+
+ public Object getAttachment()
+ {
+ return attributes.get( "" );
+ }
+
+ public Object setAttachment( Object attachment )
+ {
+ synchronized( attributes )
+ {
+ return attributes.put( "", attachment );
+ }
+ }
+
+ public Object getAttribute( String key )
+ {
+ return attributes.get( key );
+ }
+
+ public Object setAttribute( String key, Object value )
+ {
+ synchronized( attributes )
+ {
+ return attributes.put( key, value );
+ }
+ }
+
+ public Set getAttributeKeys() {
+ synchronized( attributes )
+ {
+ return attributes.keySet();
+ }
+ }
+
+ public long getReadBytes()
+ {
+ return readBytes;
+ }
+
+ public long getWrittenBytes()
+ {
+ return writtenBytes;
+ }
+
+ public void increaseReadBytes( int increment )
+ {
+ readBytes += increment;
+ lastReadTime = System.currentTimeMillis();
+ }
+
+ public void increaseWrittenBytes( int increment )
+ {
+ writtenBytes += increment;
+ lastWriteTime = System.currentTimeMillis();
+ }
+
+ public long getLastIoTime()
+ {
+ return Math.max( lastReadTime, lastWriteTime );
+ }
+
+ public long getLastReadTime()
+ {
+ return lastReadTime;
+ }
+
+ public long getLastWriteTime()
+ {
+ return lastWriteTime;
+ }
+
+ public boolean isIdle( IdleStatus status )
+ {
+ if( status == IdleStatus.BOTH_IDLE )
+ return idleForBoth;
+
+ if( status == IdleStatus.READER_IDLE )
+ return idleForRead;
+
+ if( status == IdleStatus.WRITER_IDLE )
+ return idleForWrite;
+
+ throw new IllegalArgumentException( "Unknown idle status: " + status );
+ }
+
+ public void setIdle( IdleStatus status, boolean value )
+ {
+ if( status == IdleStatus.BOTH_IDLE )
+ idleForBoth = value;
+ else if( status == IdleStatus.READER_IDLE )
+ idleForRead = value;
+ else if( status == IdleStatus.WRITER_IDLE )
+ idleForWrite = value;
+ else
+ throw new IllegalArgumentException( "Unknown idle status: "
+ + status );
+ }
+}
Propchange: directory/network/trunk/src/java/org/apache/mina/util/BaseSession.java
------------------------------------------------------------------------------
svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision
Added: directory/network/trunk/src/java/org/apache/mina/util/BaseSessionConfig.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/util/BaseSessionConfig.java?rev=164009&view=auto
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/util/BaseSessionConfig.java (added)
+++ directory/network/trunk/src/java/org/apache/mina/util/BaseSessionConfig.java Thu Apr 21 00:39:58 2005
@@ -0,0 +1,97 @@
+/*
+ * @(#) $Id$
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.mina.util;
+
+import org.apache.mina.common.IdleStatus;
+import org.apache.mina.common.SessionConfig;
+
+/**
+ * Base implementation of {@link SessionConfig}s.
+ *
+ * @author Trustin Lee (trustin@apache.org)
+ * @version $Rev$, $Date$
+ */
+public abstract class BaseSessionConfig implements SessionConfig
+{
+ private int idleTimeForRead;
+
+ private int idleTimeForWrite;
+
+ private int idleTimeForBoth;
+
+ private int writeTimeout;
+
+ protected BaseSessionConfig()
+ {
+ }
+
+ public int getIdleTime( IdleStatus status )
+ {
+ if( status == IdleStatus.BOTH_IDLE )
+ return idleTimeForBoth;
+
+ if( status == IdleStatus.READER_IDLE )
+ return idleTimeForRead;
+
+ if( status == IdleStatus.WRITER_IDLE )
+ return idleTimeForWrite;
+
+ throw new IllegalArgumentException( "Unknown idle status: " + status );
+ }
+
+ public long getIdleTimeInMillis( IdleStatus status )
+ {
+ return getIdleTime( status ) * 1000L;
+ }
+
+ public void setIdleTime( IdleStatus status, int idleTime )
+ {
+ if( idleTime < 0 )
+ throw new IllegalArgumentException( "Illegal idle time: "
+ + idleTime );
+
+ if( status == IdleStatus.BOTH_IDLE )
+ idleTimeForBoth = idleTime;
+ else if( status == IdleStatus.READER_IDLE )
+ idleTimeForRead = idleTime;
+ else if( status == IdleStatus.WRITER_IDLE )
+ idleTimeForWrite = idleTime;
+ else
+ throw new IllegalArgumentException( "Unknown idle status: "
+ + status );
+ }
+
+ public int getWriteTimeout()
+ {
+ return writeTimeout;
+ }
+
+ public long getWriteTimeoutInMillis()
+ {
+ return writeTimeout * 1000L;
+ }
+
+ public void setWriteTimeout( int writeTimeout )
+ {
+ if( writeTimeout < 0 )
+ throw new IllegalArgumentException( "Illegal write timeout: "
+ + writeTimeout );
+ this.writeTimeout = writeTimeout;
+ }
+}
\ No newline at end of file
Propchange: directory/network/trunk/src/java/org/apache/mina/util/BaseSessionConfig.java
------------------------------------------------------------------------------
svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision
Modified: directory/network/trunk/src/test/org/apache/mina/io/IoHandlerFilterChainTest.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/test/org/apache/mina/io/IoHandlerFilterChainTest.java?rev=164009&r1=164008&r2=164009&view=diff
==============================================================================
--- directory/network/trunk/src/test/org/apache/mina/io/IoHandlerFilterChainTest.java (original)
+++ directory/network/trunk/src/test/org/apache/mina/io/IoHandlerFilterChainTest.java Thu Apr 21 00:39:58 2005
@@ -27,6 +27,7 @@
import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.SessionConfig;
import org.apache.mina.common.TransportType;
+import org.apache.mina.util.BaseSession;
/**
* Tests {@link AbstractIoHandlerFilterChain}.
@@ -101,7 +102,7 @@
return buf.toString();
}
- private class TestSession implements IoSession
+ private class TestSession extends BaseSession implements IoSession
{
private IoHandler handler = new IoHandler()
{
@@ -147,15 +148,6 @@
{
}
- public Object getAttachment()
- {
- return null;
- }
-
- public void setAttachment(Object attachment)
- {
- }
-
public TransportType getTransportType()
{
return null;
@@ -179,36 +171,6 @@
public SocketAddress getLocalAddress()
{
return null;
- }
-
- public long getReadBytes()
- {
- return 0;
- }
-
- public long getWrittenBytes()
- {
- return 0;
- }
-
- public long getLastIoTime()
- {
- return 0;
- }
-
- public long getLastReadTime()
- {
- return 0;
- }
-
- public long getLastWriteTime()
- {
- return 0;
- }
-
- public boolean isIdle(IdleStatus status)
- {
- return false;
}
}
Modified: directory/network/trunk/src/test/org/apache/mina/protocol/ProtocolHandlerFilterChainTest.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/test/org/apache/mina/protocol/ProtocolHandlerFilterChainTest.java?rev=164009&r1=164008&r2=164009&view=diff
==============================================================================
--- directory/network/trunk/src/test/org/apache/mina/protocol/ProtocolHandlerFilterChainTest.java (original)
+++ directory/network/trunk/src/test/org/apache/mina/protocol/ProtocolHandlerFilterChainTest.java Thu Apr 21 00:39:58 2005
@@ -26,6 +26,7 @@
import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.SessionConfig;
import org.apache.mina.common.TransportType;
+import org.apache.mina.util.BaseSession;
/**
* Tests {@link AbstractProtocolHandlerFilterChain}.
@@ -100,7 +101,7 @@
return buf.toString();
}
- private class TestSession implements ProtocolSession
+ private class TestSession extends BaseSession implements ProtocolSession
{
private ProtocolHandler handler = new ProtocolHandler()
{
@@ -148,13 +149,6 @@
public void close() {
}
- public Object getAttachment() {
- return null;
- }
-
- public void setAttachment(Object attachment) {
- }
-
public void write(Object message) {
}
@@ -176,30 +170,6 @@
public SocketAddress getLocalAddress() {
return null;
- }
-
- public long getReadBytes() {
- return 0;
- }
-
- public long getWrittenBytes() {
- return 0;
- }
-
- public long getLastIoTime() {
- return 0;
- }
-
- public long getLastReadTime() {
- return 0;
- }
-
- public long getLastWriteTime() {
- return 0;
- }
-
- public boolean isIdle(IdleStatus status) {
- return false;
}
}
Modified: directory/network/trunk/src/test/org/apache/mina/protocol/codec/CumulativeProtocolDecoderTest.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/test/org/apache/mina/protocol/codec/CumulativeProtocolDecoderTest.java?rev=164009&r1=164008&r2=164009&view=diff
==============================================================================
--- directory/network/trunk/src/test/org/apache/mina/protocol/codec/CumulativeProtocolDecoderTest.java (original)
+++ directory/network/trunk/src/test/org/apache/mina/protocol/codec/CumulativeProtocolDecoderTest.java Thu Apr 21 00:39:58 2005
@@ -26,7 +26,6 @@
import junit.framework.TestCase;
import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.SessionConfig;
import org.apache.mina.common.TransportType;
import org.apache.mina.protocol.ProtocolDecoder;
@@ -35,6 +34,7 @@
import org.apache.mina.protocol.ProtocolHandler;
import org.apache.mina.protocol.ProtocolSession;
import org.apache.mina.protocol.ProtocolViolationException;
+import org.apache.mina.util.BaseSession;
/**
* Tests {@link CumulativeProtocolDecoder}.
@@ -171,7 +171,7 @@
}
}
- private static class ProtocolSessionImpl implements ProtocolSession
+ private static class ProtocolSessionImpl extends BaseSession implements ProtocolSession
{
public ProtocolHandler getHandler() {
@@ -189,13 +189,6 @@
public void close() {
}
- public Object getAttachment() {
- return null;
- }
-
- public void setAttachment(Object attachment) {
- }
-
public void write(Object message) {
}
@@ -218,30 +211,5 @@
public SocketAddress getLocalAddress() {
return null;
}
-
- public long getReadBytes() {
- return 0;
- }
-
- public long getWrittenBytes() {
- return 0;
- }
-
- public long getLastIoTime() {
- return 0;
- }
-
- public long getLastReadTime() {
- return 0;
- }
-
- public long getLastWriteTime() {
- return 0;
- }
-
- public boolean isIdle(IdleStatus status) {
- return false;
- }
-
}
}