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/28 10:49:49 UTC
svn commit: r165118 - in
/directory/network/trunk/src/java/org/apache/mina/protocol:
io/IoAdapter.java io/IoProtocolFilterChain.java io/IoProtocolSession.java
vmpipe/VmPipeSession.java
Author: trustin
Date: Thu Apr 28 01:49:48 2005
New Revision: 165118
URL: http://svn.apache.org/viewcvs?rev=165118&view=rev
Log:
* Added JavaDoc to VmPipeSession
* Extracted IoProtocolSession from IoAdapter so that users can downcast it
Added:
directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolSession.java (with props)
Modified:
directory/network/trunk/src/java/org/apache/mina/protocol/io/IoAdapter.java
directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolFilterChain.java
directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeSession.java
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=165118&r1=165117&r2=165118&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 28 01:49:48 2005
@@ -18,20 +18,14 @@
*/
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;
-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.protocol.ProtocolCodecFactory;
import org.apache.mina.protocol.ProtocolDecoder;
-import org.apache.mina.protocol.ProtocolDecoderOutput;
import org.apache.mina.protocol.ProtocolEncoder;
-import org.apache.mina.protocol.ProtocolEncoderOutput;
import org.apache.mina.protocol.ProtocolHandler;
import org.apache.mina.protocol.ProtocolHandlerFilterChain;
import org.apache.mina.protocol.ProtocolProvider;
@@ -51,11 +45,11 @@
* @author Trustin Lee (trustin@apache.org)
* @version $Rev$, $Date$
*/
-public class IoAdapter
+class IoAdapter
{
private static final String KEY = "IoAdapter.ProtocolSession";
- private final IoProtocolFilterChain filters = new IoProtocolFilterChain();
+ final IoProtocolFilterChain filters = new IoProtocolFilterChain();
IoAdapter()
{
@@ -96,8 +90,8 @@
class SessionHandlerAdapter implements IoHandler
{
- private final ProtocolCodecFactory codecFactory;
- private final ProtocolHandler handler;
+ final ProtocolCodecFactory codecFactory;
+ final ProtocolHandler handler;
public SessionHandlerAdapter( ProtocolProvider protocolProvider )
{
@@ -127,7 +121,7 @@
public void dataRead( IoSession session, ByteBuffer in )
{
- ProtocolSessionImpl psession = getProtocolSession( session );
+ IoProtocolSession psession = getProtocolSession( session );
ProtocolDecoder decoder = psession.decoder;
try
{
@@ -170,7 +164,7 @@
void doWrite( IoSession session )
{
- ProtocolSessionImpl psession = getProtocolSession( session );
+ IoProtocolSession psession = getProtocolSession( session );
ProtocolEncoder encoder = psession.encoder;
Queue writeQueue = psession.writeQueue;
@@ -209,238 +203,25 @@
}
}
- private ProtocolSessionImpl getProtocolSession( IoSession session )
+ private IoProtocolSession getProtocolSession( IoSession session )
{
- ProtocolSessionImpl psession =
- ( ProtocolSessionImpl ) session.getAttribute( KEY );
+ IoProtocolSession psession =
+ ( IoProtocolSession ) session.getAttribute( KEY );
if( psession == null )
{
synchronized( session )
{
psession =
- ( ProtocolSessionImpl ) session.getAttribute( KEY );
+ ( IoProtocolSession ) session.getAttribute( KEY );
if( psession == null )
{
- psession = new ProtocolSessionImpl( session, this );
+ psession = new IoProtocolSession( IoAdapter.this, session, this );
session.setAttribute( KEY, psession );
}
}
}
return psession;
- }
- }
-
- class ProtocolSessionImpl implements ProtocolSession
- {
- final IoSession session;
-
- final SessionHandlerAdapter adapter;
-
- final Queue writeQueue = new Queue();
-
- private final ProtocolEncoder encoder;
-
- private final ProtocolDecoder decoder;
-
- private final ProtocolEncoderOutputImpl encOut;
-
- private final ProtocolDecoderOutputImpl decOut;
-
- private ProtocolSessionImpl( IoSession session,
- SessionHandlerAdapter adapter )
- {
- this.session = session;
- this.adapter = adapter;
- this.encoder = adapter.codecFactory.newEncoder();
- this.decoder = adapter.codecFactory.newDecoder();
- this.encOut = new ProtocolEncoderOutputImpl();
- this.decOut = new ProtocolDecoderOutputImpl();
- }
-
- public ProtocolHandler getHandler()
- {
- return adapter.handler;
- }
-
- public ProtocolEncoder getEncoder()
- {
- return encoder;
- }
-
- public ProtocolDecoder getDecoder()
- {
- return decoder;
- }
-
- public void close()
- {
- session.close();
- }
-
- public void close( boolean wait )
- {
- session.close( wait );
- }
-
- public Object getAttachment()
- {
- 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 Object removeAttribute( String key )
- {
- return session.removeAttribute( key );
- }
-
- public Set getAttributeKeys()
- {
- return session.getAttributeKeys();
- }
-
- public void write( Object message )
- {
- filters.filterWrite( this, message );
- }
-
- public TransportType getTransportType()
- {
- return session.getTransportType();
- }
-
- public boolean isConnected()
- {
- return session.isConnected();
- }
-
- public SessionConfig getConfig()
- {
- return session.getConfig();
- }
-
- public SocketAddress getRemoteAddress()
- {
- return session.getRemoteAddress();
- }
-
- public SocketAddress getLocalAddress()
- {
- return session.getLocalAddress();
- }
-
- public long getReadBytes()
- {
- return session.getReadBytes();
- }
-
- public long getWrittenBytes()
- {
- return session.getWrittenBytes();
- }
-
- public long getLastIoTime()
- {
- return session.getLastIoTime();
- }
-
- public long getLastReadTime()
- {
- return session.getLastReadTime();
- }
-
- public long getLastWriteTime()
- {
- return session.getLastWriteTime();
- }
-
- public boolean isIdle( IdleStatus status )
- {
- return session.isIdle( status );
- }
- }
-
- private static class ProtocolEncoderOutputImpl implements
- ProtocolEncoderOutput
- {
-
- private final Queue queue = new Queue();
-
- private ProtocolEncoderOutputImpl()
- {
- }
-
- public void write( ByteBuffer buf )
- {
- queue.push( buf );
- }
-
- public void mergeAll()
- {
- int sum = 0;
- final int size = queue.size();
-
- if( size < 2 )
- {
- // no need to merge!
- return;
- }
-
- // Get the size of merged BB
- for( int i = size - 1; i >= 0; i -- )
- {
- sum += ( ( ByteBuffer ) queue.get( i ) ).remaining();
- }
-
- // Allocate a new BB that will contain all fragments
- ByteBuffer newBuf = ByteBuffer.allocate( sum );
-
- // and merge all.
- for( ;; )
- {
- ByteBuffer buf = ( ByteBuffer ) queue.pop();
- if( buf == null )
- {
- break;
- }
-
- newBuf.put( buf );
- buf.release();
- }
-
- // Push the new buffer finally.
- newBuf.flip();
- queue.push(newBuf);
- }
- }
-
- private static class ProtocolDecoderOutputImpl implements
- ProtocolDecoderOutput
- {
-
- private final Queue messageQueue = new Queue();
-
- private ProtocolDecoderOutputImpl()
- {
- }
-
- public void write( Object message )
- {
- messageQueue.push( message );
}
}
}
Modified: directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolFilterChain.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolFilterChain.java?rev=165118&r1=165117&r2=165118&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolFilterChain.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolFilterChain.java Thu Apr 28 01:49:48 2005
@@ -2,7 +2,6 @@
import org.apache.mina.protocol.AbstractProtocolHandlerFilterChain;
import org.apache.mina.protocol.ProtocolSession;
-import org.apache.mina.protocol.io.IoAdapter.ProtocolSessionImpl;
import org.apache.mina.util.Queue;
class IoProtocolFilterChain extends AbstractProtocolHandlerFilterChain {
@@ -13,13 +12,13 @@
protected void doWrite( ProtocolSession session, Object message )
{
- ProtocolSessionImpl s = ( ProtocolSessionImpl ) session;
+ IoProtocolSession s = ( IoProtocolSession ) session;
Queue writeQueue = s.writeQueue;
synchronized( writeQueue )
{
writeQueue.push( message );
}
- s.adapter.doWrite( s.session );
+ s.shAdapter.doWrite( s.session );
}
}
Added: directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolSession.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolSession.java?rev=165118&view=auto
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolSession.java (added)
+++ directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolSession.java Thu Apr 28 01:49:48 2005
@@ -0,0 +1,248 @@
+/**
+ *
+ */
+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;
+import org.apache.mina.common.SessionConfig;
+import org.apache.mina.common.TransportType;
+import org.apache.mina.io.IoSession;
+import org.apache.mina.protocol.ProtocolDecoder;
+import org.apache.mina.protocol.ProtocolDecoderOutput;
+import org.apache.mina.protocol.ProtocolEncoder;
+import org.apache.mina.protocol.ProtocolEncoderOutput;
+import org.apache.mina.protocol.ProtocolHandler;
+import org.apache.mina.protocol.ProtocolSession;
+import org.apache.mina.protocol.io.IoAdapter.SessionHandlerAdapter;
+import org.apache.mina.util.Queue;
+
+/**
+ * A {@link ProtocolSession} that is backed by {@link IoSession}.
+ *
+ * @author Trustin Lee (trustin@apache.org)
+ * @version $Rev$, $Date$
+ */
+public class IoProtocolSession implements ProtocolSession
+{
+ private final IoAdapter ioAdapter;
+
+ final IoSession session;
+
+ final SessionHandlerAdapter shAdapter;
+
+ final Queue writeQueue = new Queue();
+
+ final ProtocolEncoder encoder;
+
+ final ProtocolDecoder decoder;
+
+ final ProtocolEncoderOutputImpl encOut;
+
+ final ProtocolDecoderOutputImpl decOut;
+
+ IoProtocolSession( IoAdapter ioAdapter, IoSession session,
+ SessionHandlerAdapter shAdapter )
+ {
+ this.ioAdapter = ioAdapter;
+ this.session = session;
+ this.shAdapter = shAdapter;
+ this.encoder = shAdapter.codecFactory.newEncoder();
+ this.decoder = shAdapter.codecFactory.newDecoder();
+ this.encOut = new ProtocolEncoderOutputImpl();
+ this.decOut = new ProtocolDecoderOutputImpl();
+ }
+
+ /**
+ * Returns the {@link IoSession} this session is backed by.
+ */
+ public IoSession getIoSession()
+ {
+ return session;
+ }
+
+ public ProtocolHandler getHandler()
+ {
+ return shAdapter.handler;
+ }
+
+ public ProtocolEncoder getEncoder()
+ {
+ return encoder;
+ }
+
+ public ProtocolDecoder getDecoder()
+ {
+ return decoder;
+ }
+
+ public void close()
+ {
+ session.close();
+ }
+
+ public void close( boolean wait )
+ {
+ session.close( wait );
+ }
+
+ public Object getAttachment()
+ {
+ 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 Object removeAttribute( String key )
+ {
+ return session.removeAttribute( key );
+ }
+
+ public Set getAttributeKeys()
+ {
+ return session.getAttributeKeys();
+ }
+
+ public void write( Object message )
+ {
+ this.ioAdapter.filters.filterWrite( this, message );
+ }
+
+ public TransportType getTransportType()
+ {
+ return session.getTransportType();
+ }
+
+ public boolean isConnected()
+ {
+ return session.isConnected();
+ }
+
+ public SessionConfig getConfig()
+ {
+ return session.getConfig();
+ }
+
+ public SocketAddress getRemoteAddress()
+ {
+ return session.getRemoteAddress();
+ }
+
+ public SocketAddress getLocalAddress()
+ {
+ return session.getLocalAddress();
+ }
+
+ public long getReadBytes()
+ {
+ return session.getReadBytes();
+ }
+
+ public long getWrittenBytes()
+ {
+ return session.getWrittenBytes();
+ }
+
+ public long getLastIoTime()
+ {
+ return session.getLastIoTime();
+ }
+
+ public long getLastReadTime()
+ {
+ return session.getLastReadTime();
+ }
+
+ public long getLastWriteTime()
+ {
+ return session.getLastWriteTime();
+ }
+
+ public boolean isIdle( IdleStatus status )
+ {
+ return session.isIdle( status );
+ }
+
+ static class ProtocolEncoderOutputImpl implements ProtocolEncoderOutput
+ {
+
+ final Queue queue = new Queue();
+
+ private ProtocolEncoderOutputImpl()
+ {
+ }
+
+ public void write( ByteBuffer buf )
+ {
+ queue.push( buf );
+ }
+
+ public void mergeAll()
+ {
+ int sum = 0;
+ final int size = queue.size();
+
+ if( size < 2 )
+ {
+ // no need to merge!
+ return;
+ }
+
+ // Get the size of merged BB
+ for( int i = size - 1; i >= 0; i -- )
+ {
+ sum += ( ( ByteBuffer ) queue.get( i ) ).remaining();
+ }
+
+ // Allocate a new BB that will contain all fragments
+ ByteBuffer newBuf = ByteBuffer.allocate( sum );
+
+ // and merge all.
+ for( ;; )
+ {
+ ByteBuffer buf = ( ByteBuffer ) queue.pop();
+ if( buf == null )
+ {
+ break;
+ }
+
+ newBuf.put( buf );
+ buf.release();
+ }
+
+ // Push the new buffer finally.
+ newBuf.flip();
+ queue.push(newBuf);
+ }
+ }
+
+ static class ProtocolDecoderOutputImpl implements ProtocolDecoderOutput
+ {
+ final Queue messageQueue = new Queue();
+
+ private ProtocolDecoderOutputImpl()
+ {
+ }
+
+ public void write( Object message )
+ {
+ messageQueue.push( message );
+ }
+ }
+}
\ No newline at end of file
Propchange: directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolSession.java
------------------------------------------------------------------------------
svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision
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=165118&r1=165117&r2=165118&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 28 01:49:48 2005
@@ -17,7 +17,7 @@
import org.apache.mina.util.BaseSession;
/**
- * TODO Document me.
+ * A {@link ProtocolSession} for in-VM transport (VM_PIPE).
*
* @author Trustin Lee (trustin@apache.org)
* @version $Rev$, $Date$