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
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 }