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 public class ServerSessionHandler extends IoHandlerAdapter {
37
38 private static final String SUM_KEY = "sum";
39
40 private final static Logger LOGGER = LoggerFactory.getLogger(ServerSessionHandler.class);
41
42 @Override
43 public void sessionOpened(IoSession session) {
44
45 session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, 60);
46
47
48 session.setAttribute(SUM_KEY, new Integer(0));
49 }
50
51 @Override
52 public void messageReceived(IoSession session, Object message) {
53
54
55 AddMessage am = (AddMessage) message;
56
57
58 int sum = ((Integer) session.getAttribute(SUM_KEY)).intValue();
59 int value = am.getValue();
60 long expectedSum = (long) sum + value;
61 if (expectedSum > Integer.MAX_VALUE || expectedSum < Integer.MIN_VALUE) {
62
63 ResultMessage rm = new ResultMessage();
64 rm.setSequence(am.getSequence());
65 rm.setOk(false);
66 session.write(rm);
67 } else {
68
69 sum = (int) expectedSum;
70 session.setAttribute(SUM_KEY, new Integer(sum));
71
72
73 ResultMessage rm = new ResultMessage();
74 rm.setSequence(am.getSequence());
75 rm.setOk(true);
76 rm.setValue(sum);
77 session.write(rm);
78 }
79 }
80
81 @Override
82 public void sessionIdle(IoSession session, IdleStatus status) {
83 LOGGER.info("Disconnecting the idle.");
84
85 session.close(true);
86 }
87
88 @Override
89 public void exceptionCaught(IoSession session, Throwable cause) {
90
91 session.close(true);
92 }
93 }