KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > mina > example > sumup > ServerSessionHandler


1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied. See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  *
19  */

20 package org.apache.mina.example.sumup;
21
22 import org.apache.mina.common.IdleStatus;
23 import org.apache.mina.common.IoHandler;
24 import org.apache.mina.common.IoHandlerAdapter;
25 import org.apache.mina.common.IoSession;
26 import org.apache.mina.example.sumup.message.AddMessage;
27 import org.apache.mina.example.sumup.message.ResultMessage;
28 import org.apache.mina.util.SessionLog;
29
30 /**
31  * {@link IoHandler} for SumUp server.
32  *
33  * @author The Apache Directory Project (mina-dev@directory.apache.org)
34  * @version $Rev: 555855 $, $Date: 2007-07-13 12:19:00 +0900 (금, 13 7월 2007) $
35  */

36 public class ServerSessionHandler extends IoHandlerAdapter {
37     public void sessionOpened(IoSession session) {
38         // set idle time to 60 seconds
39
session.setIdleTime(IdleStatus.BOTH_IDLE, 60);
40
41         // initial sum is zero
42
session.setAttachment(new Integer JavaDoc(0));
43     }
44
45     public void messageReceived(IoSession session, Object JavaDoc message) {
46         // client only sends AddMessage. otherwise, we will have to identify
47
// its type using instanceof operator.
48
AddMessage am = (AddMessage) message;
49
50         // add the value to the current sum.
51
int sum = ((Integer JavaDoc) session.getAttachment()).intValue();
52         int value = am.getValue();
53         long expectedSum = (long) sum + value;
54         if (expectedSum > Integer.MAX_VALUE || expectedSum < Integer.MIN_VALUE) {
55             // if the sum overflows or underflows, return error message
56
ResultMessage rm = new ResultMessage();
57             rm.setSequence(am.getSequence()); // copy sequence
58
rm.setOk(false);
59             session.write(rm);
60         } else {
61             // sum up
62
sum = (int) expectedSum;
63             session.setAttachment(new Integer JavaDoc(sum));
64
65             // return the result message
66
ResultMessage rm = new ResultMessage();
67             rm.setSequence(am.getSequence()); // copy sequence
68
rm.setOk(true);
69             rm.setValue(sum);
70             session.write(rm);
71         }
72     }
73
74     public void sessionIdle(IoSession session, IdleStatus status) {
75         SessionLog.info(session, "Disconnecting the idle.");
76         // disconnect an idle client
77
session.close();
78     }
79
80     public void exceptionCaught(IoSession session, Throwable JavaDoc cause) {
81         // close the connection on exceptional situation
82
session.close();
83     }
84 }
Popular Tags