1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.mina.examples.sumup;
20
21 import org.apache.mina.common.IdleStatus;
22 import org.apache.mina.examples.sumup.message.AddMessage;
23 import org.apache.mina.examples.sumup.message.ResultMessage;
24 import org.apache.mina.protocol.ProtocolHandler;
25 import org.apache.mina.protocol.ProtocolSession;
26 import org.apache.mina.protocol.filter.ProtocolLoggingFilter;
27 import org.apache.mina.util.SessionLog;
28
29 /***
30 * {@link ProtocolHandler} for SumUp server.
31 *
32 * @author The Apache Directory Project
33 * @version $Rev: 332218 $, $Date: 2005-11-10 12:52:42 +0900 $
34 */
35 public class ServerSessionHandler implements ProtocolHandler
36 {
37
38 public ServerSessionHandler()
39 {
40 }
41
42 public void sessionCreated( ProtocolSession session ) throws Exception
43 {
44 session.getFilterChain().addLast(
45 "logger", new ProtocolLoggingFilter() );
46 }
47
48 public void sessionOpened( ProtocolSession session )
49 {
50
51 session.getConfig().setIdleTime( IdleStatus.BOTH_IDLE, 60 );
52
53
54 session.setAttachment( new Integer( 0 ) );
55 }
56
57 public void sessionClosed( ProtocolSession session )
58 {
59 }
60
61 public void messageReceived( ProtocolSession session, Object message )
62 {
63
64
65 AddMessage am = ( AddMessage ) message;
66
67
68 int sum = ( ( Integer ) session.getAttachment() ).intValue();
69 int value = am.getValue();
70 long expectedSum = ( long ) sum + value;
71 if( expectedSum > Integer.MAX_VALUE || expectedSum < Integer.MIN_VALUE )
72 {
73
74 ResultMessage rm = new ResultMessage();
75 rm.setSequence( am.getSequence() );
76 rm.setOk( false );
77 session.write( rm );
78 }
79 else
80 {
81
82 sum = ( int ) expectedSum;
83 session.setAttachment( new Integer( sum ) );
84
85
86 ResultMessage rm = new ResultMessage();
87 rm.setSequence( am.getSequence() );
88 rm.setOk( true );
89 rm.setValue( sum );
90 session.write( rm );
91 }
92 }
93
94 public void messageSent( ProtocolSession session, Object message )
95 {
96 }
97
98 public void sessionIdle( ProtocolSession session, IdleStatus status )
99 {
100 SessionLog.warn( session, "Disconnecting the idle." );
101
102 session.close();
103 }
104
105 public void exceptionCaught( ProtocolSession session, Throwable cause )
106 {
107
108 session.close();
109 }
110 }