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.examples.sumup.message.AddMessage;
22 import org.apache.mina.examples.sumup.message.ResultMessage;
23 import org.apache.mina.protocol.ProtocolHandler;
24 import org.apache.mina.protocol.ProtocolHandlerAdapter;
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 client.
31 *
32 * @author The Apache Directory Project
33 * @version $Rev: 332218 $, $Date: 2005-11-10 12:52:42 +0900 $
34 */
35 public class ClientSessionHandler extends ProtocolHandlerAdapter
36 {
37 private final int[] values;
38
39 private boolean finished;
40
41 public ClientSessionHandler( int[] values )
42 {
43 this.values = values;
44 }
45
46 public boolean isFinished()
47 {
48 return finished;
49 }
50
51 public void sessionCreated( ProtocolSession session )
52 {
53 session.getFilterChain().addLast(
54 "logger", new ProtocolLoggingFilter() );
55 }
56
57 public void sessionOpened( ProtocolSession session )
58 {
59
60 for( int i = 0; i < values.length; i++ )
61 {
62 AddMessage m = new AddMessage();
63 m.setSequence( i );
64 m.setValue( values[ i ] );
65 session.write( m );
66 }
67 }
68
69 public void messageReceived( ProtocolSession session, Object message )
70 {
71
72
73 ResultMessage rm = ( ResultMessage ) message;
74 if( rm.isOk() )
75 {
76
77
78
79
80 if( rm.getSequence() == values.length - 1 )
81 {
82
83 SessionLog.info( session, "The sum: " + rm.getValue() );
84 session.close();
85 finished = true;
86 }
87 }
88 else
89 {
90
91 SessionLog.warn( session, "Server error, disconnecting..." );
92 session.close();
93 finished = true;
94 }
95 }
96
97 public void exceptionCaught( ProtocolSession session, Throwable cause )
98 {
99 session.close();
100 }
101 }