1   package testcase;
2   
3   import org.apache.mina.core.buffer.IoBuffer;
4   import org.apache.mina.core.service.IoHandlerAdapter;
5   import org.apache.mina.core.session.IoSession;
6   import org.slf4j.Logger;
7   import org.slf4j.LoggerFactory;
8   import static testcase.MinaRegressionTest.MSG_COUNT;
9   import static testcase.MinaRegressionTest.OPEN;
10  
11  import java.io.IOException;
12  import java.util.concurrent.atomic.AtomicInteger;
13  
14  public class MyIoHandler extends IoHandlerAdapter {
15    private static final Logger logger = LoggerFactory.getLogger(MyIoHandler.class);
16    public static AtomicInteger received = new AtomicInteger(0);
17    public static AtomicInteger closed = new AtomicInteger(0);
18    private final Object LOCK;
19  
20    public MyIoHandler(Object lock) {
21      LOCK = lock;
22    }
23  
24    @Override
25    public void exceptionCaught(IoSession session, Throwable cause) {
26      if (!(cause instanceof IOException)) {
27        logger.error("Exception: ", cause);
28      } else {
29        logger.info("I/O error: " + cause.getMessage());
30      }
31      session.close(true);
32    }
33  
34    @Override
35    public void sessionOpened(IoSession session) throws Exception {
36        logger.info( "Session " + session.getId() + " is opened" );
37      session.resumeRead();
38    }
39  
40    @Override
41    public void sessionCreated(IoSession session) throws Exception {
42        logger.info( "Creation of session " + session.getId() );
43      session.setAttribute(OPEN);
44      session.suspendRead();
45    }
46  
47    @Override
48    public void sessionClosed(IoSession session) throws Exception {
49      session.removeAttribute(OPEN);
50      logger.info("{}> Session closed", session.getId());
51      final int clsd = closed.incrementAndGet();
52      
53      if (clsd == MSG_COUNT) {
54        synchronized (LOCK) {
55          LOCK.notifyAll();
56        }
57      }
58      
59      int i = 0;
60      
61      try
62      {
63          int j = 2 / i;
64      } 
65      catch ( Exception e )
66      {
67          //e.printStackTrace();
68      }
69    }
70  
71    @Override
72    public void messageReceived(IoSession session, Object message) throws Exception {
73      IoBuffer msg = (IoBuffer) message;
74      logger.info("MESSAGE: " + msg.remaining() + " on session " + session.getId() );
75      final int rec = received.incrementAndGet();
76      
77      if (rec == MSG_COUNT) {
78        synchronized (LOCK) {
79          LOCK.notifyAll();
80        }
81      }
82      
83      session.close(true);
84    }
85  }