1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.example.sumup;
21
22 import org.apache.mina.core.service.IoHandler;
23 import org.apache.mina.core.service.IoHandlerAdapter;
24 import org.apache.mina.core.session.IdleStatus;
25 import org.apache.mina.core.session.IoSession;
26 import org.apache.mina.example.sumup.message.AddMessage;
27 import org.apache.mina.example.sumup.message.ResultMessage;
28 import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory;
30
31
32
33
34
35
36
37 public class ServerSessionHandler extends IoHandlerAdapter {
38
39 private static final String SUM_KEY = "sum";
40
41 private final Logger logger = LoggerFactory.getLogger(getClass());
42
43 @Override
44 public void sessionOpened(IoSession session) {
45
46 session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, 60);
47
48
49 session.setAttribute(SUM_KEY, new Integer(0));
50 }
51
52 @Override
53 public void messageReceived(IoSession session, Object message) {
54
55
56 AddMessage am = (AddMessage) message;
57
58
59 int sum = ((Integer) session.getAttribute(SUM_KEY)).intValue();
60 int value = am.getValue();
61 long expectedSum = (long) sum + value;
62 if (expectedSum > Integer.MAX_VALUE || expectedSum < Integer.MIN_VALUE) {
63
64 ResultMessage rm = new ResultMessage();
65 rm.setSequence(am.getSequence());
66 rm.setOk(false);
67 session.write(rm);
68 } else {
69
70 sum = (int) expectedSum;
71 session.setAttribute(SUM_KEY, new Integer(sum));
72
73
74 ResultMessage rm = new ResultMessage();
75 rm.setSequence(am.getSequence());
76 rm.setOk(true);
77 rm.setValue(sum);
78 session.write(rm);
79 }
80 }
81
82 @Override
83 public void sessionIdle(IoSession session, IdleStatus status) {
84 logger.info("Disconnecting the idle.");
85
86 session.close();
87 }
88
89 @Override
90 public void exceptionCaught(IoSession session, Throwable cause) {
91
92 session.close();
93 }
94 }