View Javadoc

1   /*
2    *   @(#) $Id: EchoProtocolHandler.java 355016 2005-12-08 07:00:30Z trustin $
3    *
4    *   Copyright 2004 The Apache Software Foundation
5    *
6    *   Licensed under the Apache License, Version 2.0 (the "License");
7    *   you may not use this file except in compliance with the License.
8    *   You may obtain a copy of the License at
9    *
10   *       http://www.apache.org/licenses/LICENSE-2.0
11   *
12   *   Unless required by applicable law or agreed to in writing, software
13   *   distributed under the License is distributed on an "AS IS" BASIS,
14   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   *   See the License for the specific language governing permissions and
16   *   limitations under the License.
17   *
18   */
19  package org.apache.mina.examples.echoserver;
20  
21  import org.apache.mina.common.ByteBuffer;
22  import org.apache.mina.common.IdleStatus;
23  import org.apache.mina.common.IoHandler;
24  import org.apache.mina.common.IoHandlerAdapter;
25  import org.apache.mina.common.IoSession;
26  import org.apache.mina.filter.SSLFilter;
27  import org.apache.mina.transport.socket.nio.SocketSession;
28  import org.slf4j.Logger;
29  import org.slf4j.LoggerFactory;
30  
31  /***
32   * {@link IoHandler} implementation for echo server. 
33   * 
34   * @author The Apache Directory Project (dev@directory.apache.org)
35   * @version $Rev: 355016 $, $Date: 2005-12-08 16:00:30 +0900 (Thu, 08 Dec 2005) $,
36   */
37  public class EchoProtocolHandler extends IoHandlerAdapter
38  {
39      private static final Logger log = LoggerFactory.getLogger( EchoProtocolHandler.class );
40  
41      public void sessionCreated( IoSession session )
42      {
43          if( session instanceof SocketSession )
44          {
45              ( ( SocketSession ) session ).setSessionReceiveBufferSize( 2048 );
46          }
47          
48          session.setIdleTime( IdleStatus.BOTH_IDLE, 10 );
49          
50          // We're going to use SSL negotiation notification.
51          session.setAttribute( SSLFilter.USE_NOTIFICATION );
52      }
53      
54      public void sessionIdle( IoSession session, IdleStatus status )
55      {
56          log.info(
57                  "*** IDLE #" +
58                  session.getIdleCount( IdleStatus.BOTH_IDLE ) +
59                  " ***" );
60      }
61  
62      public void exceptionCaught( IoSession session, Throwable cause )
63      {
64          cause.printStackTrace();
65          session.close();
66      }
67  
68      public void messageReceived( IoSession session, Object message ) throws Exception
69      {
70          if( !( message instanceof ByteBuffer ) )
71          {
72              return;
73          }
74  
75          ByteBuffer rb = ( ByteBuffer ) message;
76          // Write the received data back to remote peer
77          ByteBuffer wb = ByteBuffer.allocate( rb.remaining() );
78          wb.put( rb );
79          wb.flip();
80          session.write( wb );
81      }
82  }