View Javadoc

1   package org.apache.mina.io.socket;
2   
3   import org.apache.mina.common.ByteBuffer;
4   import org.apache.mina.io.IoFilterChain;
5   import org.apache.mina.io.IoSession;
6   import org.apache.mina.io.IoSessionManager;
7   import org.apache.mina.io.IoSessionManagerFilterChain;
8   import org.apache.mina.util.Queue;
9   
10  /***
11   * An {@link IoFilterChain} for socket transport (TCP/IP).
12   * 
13   * @author The Apache Directory Project
14   */
15  class SocketSessionManagerFilterChain extends IoSessionManagerFilterChain {
16  
17      SocketSessionManagerFilterChain( IoSessionManager manager )
18      {
19          super( manager );
20      }
21  
22      protected void doWrite( IoSession session, ByteBuffer buf, Object marker )
23      {
24          SocketSession s = ( SocketSession ) session;
25          Queue writeBufferQueue = s.getWriteBufferQueue();
26          Queue writeMarkerQueue = s.getWriteMarkerQueue();
27          
28          synchronized( writeBufferQueue )
29          {
30              writeBufferQueue.push( buf );
31              writeMarkerQueue.push( marker );
32              if( writeBufferQueue.size() == 1 )
33              {
34                  // Notify SocketIoProcessor only when writeBufferQueue was empty.
35                  SocketIoProcessor.getInstance().flushSession( s );
36              }
37          }
38      }
39  }