📄 serversessionhandler.java
字号:
/*
* @(#) $Id: ServerSessionHandler.java 357871 2005-12-20 01:56:40Z trustin $
*
* Copyright 2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.mina.examples.call;
import java.util.ArrayList;
import java.util.List;
import org.apache.mina.common.IdleStatus;
import org.apache.mina.examples.call.message.ActiveTestMessage;
import org.apache.mina.examples.call.message.ActiveTestResponseMessage;
import org.apache.mina.examples.call.message.CallHangMessage;
import org.apache.mina.examples.call.message.CallHangResponseMessage;
import org.apache.mina.examples.call.message.CallInMessage;
import org.apache.mina.examples.call.message.CallInResponseMessage;
import org.apache.mina.examples.call.message.CallOutMessage;
import org.apache.mina.examples.call.message.CallOutResponseMessage;
import org.apache.mina.examples.call.message.CallOutResultMessage;
import org.apache.mina.examples.call.message.CallOutResultResponseMessage;
import org.apache.mina.examples.call.message.LoginMessage;
import org.apache.mina.examples.call.message.LoginResponseMessage;
import org.apache.mina.examples.call.message.LogoutMessage;
import org.apache.mina.examples.call.message.LogoutResponseMessage;
import org.apache.mina.protocol.ProtocolFilterChain;
import org.apache.mina.protocol.ProtocolHandler;
import org.apache.mina.protocol.ProtocolSession;
import org.apache.mina.protocol.filter.ProtocolLoggingFilter;
/**
* {@link ProtocolHandler} for SumUp server.
*
* @author The Apache Directory Project
* @version $Rev: 357871 $, $Date: 2005-12-20 10:56:40 +0900 (Tue, 20 Dec 2005) $
*/
public class ServerSessionHandler implements ProtocolHandler {
//private static int i;
private int indexOfSession;
private List sessionList ;
private ActiveTestResponseMessage activeResponse ;
private CallOutResponseMessage activeResponse1 ;
public ServerSessionHandler() {
//add by lk
//i = 0;
//System.out.println("i= " + i);
sessionList = (List)new ArrayList();
System.out.println("sess Custruactor, sessionList.size():" + sessionList.size());
}
public String getStringAttribute(ProtocolSession session,String key){
byte[] tmp = (byte[])session.getAttribute(key);
return new String(tmp);
}
public int callOut(String account,String no){
int len = sessionList.size();
for(int i=0;i<len;i++){
ProtocolSession sess = (ProtocolSession)sessionList.get(i);
if(this.getStringAttribute(sess,"name").toLowerCase().equals(account.toLowerCase())){
Object message = null;
//.............
if(true)
return 1;
else
return 0;
}
}
return -1;
}
public void sessionCreated(ProtocolSession session) throws Exception {
///
/*
System.out.println("\n--info sessionCreated begin...");
session.getFilterChain().addLast("logger", new ProtocolLoggingFilter());
ProtocolFilterChain filterChain = session.getFilterChain();
List list = filterChain.getChildren();
System.out.println("--info protocol list size:" + list.size()); for
(int i = 0; i < list.size(); i++) { System.out.println("--info protocol:" + list.get(i)); }
*/
///
System.out.println("--info sessionCreated end");
}
public void sessionOpened(ProtocolSession session) {
System.out.println("--info sessionOpend");
// set idle time to seconds
session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, // 设置睡眠时间 lk
Constants.IDLE_SECOND);
// add by lk
//List sessionList = (List)new ArrayList();
sessionList.add(session);
//i++;
//System.out.println("i= " + i);
//sessionList.size();
indexOfSession = sessionList.indexOf(session);
//sessionList.remove(session);
//sessionList.toString();
//session.setAttribute("id",)
System.out.println("sess open ,sessionList.size():" + sessionList.size());
System.out.println("sess open ,indexOf(session):" + indexOfSession);
}
public void sessionClosed(ProtocolSession session) {
System.out.println("\n--info sessionClosed");
//i--;
//System.out.println("i= " + i);
System.out.println("sess close ,remove indexOf(session):" + indexOfSession + ";attribute:" + this.getStringAttribute(session,"name") );
indexOfSession = sessionList.indexOf(session);
sessionList.remove(indexOfSession); // 关闭时候一定要移除该session的list,否则肯能该session还在list中。lk
//sessionList.remove(session);
System.out.println("sess close sessionList.size():" + sessionList.size());
System.out.println("sess close ,after removed ,indexOf(session) value:" + sessionList.indexOf(session) + ";attribute:" + this.getStringAttribute(session,"name"));
}
public void messageReceived(ProtocolSession session, Object message) {
System.out
.println("\n--info server message Received begin,class:" + this);
TestWebService testWebService = new TestWebService(); // add lk
// process login message
if (message instanceof LoginMessage) {
// receive login message
LoginMessage login = (LoginMessage) message;
System.out
.println("--info server receive message type is login,user:"
+ new String(login.getUser()));
System.out
.println("--info server receive message type is login,password:"
+ new String(login.getPassword()));
// 登录判断处理逻辑开始
if (0 == testWebService.testCallWebLogin("test","test")){ // 调用小胡的函数对台席登陆权限进行判断。
System.out.println("Login failure!");
session.close();
}
else{
System.out.println("Login success!");
}
session.setAttribute("name",login.getUser()); // 设置session的属性。
System.out.println("session.getAttribute(name):" + this.getStringAttribute(session,"name"));
System.out.println("Login sessionList.size():" + sessionList.size());
// 登录判断处理逻辑结束
// must send login_response
//
LoginResponseMessage myMessage = new LoginResponseMessage();
myMessage.setHead_len(Constants.MESSAGE_LEN_LOGIN_RESPONSE);
myMessage.setHead_command(Constants.TYPE_LOGIN_RESPONSE);
myMessage.setHead_sequence(login.getHead_sequence());
myMessage.setResult(0);// 0-success
myMessage.setVersion(login.getVersion());
// send
session.write(myMessage);
this.test(session,null); //test callOut. lk,
//this.testActiveTest(session,null);
}
// process logout message // add seg. lk
if (message instanceof LogoutMessage) {
// receive logout message
LogoutMessage logout = (LogoutMessage) message;
System.out
.println("--info server receive message type is logout,user:"
+ this.getStringAttribute(session,"name") );
// 登出判断处理逻辑开始
// 登出判断处理逻辑结束
// must send logout_response
LogoutResponseMessage myMessage = new LogoutResponseMessage();
myMessage.setHead_len(Constants.MESSAGE_LEN_LOGOUT_RESPONSE);
myMessage.setHead_command(Constants.TYPE_LOGOUT_RESPONSE);
myMessage.setHead_sequence(logout.getHead_sequence());
// send
session.write(myMessage);
session.close();
}
// process call_out_response
if (message instanceof CallOutResponseMessage) {
CallOutResponseMessage myMessage = (CallOutResponseMessage) message;
System.out
.println("--info server receive message type is callOutResponse");
// add seg .lk
activeResponse1 = myMessage;
System.out.println("activeResponse1:" + activeResponse1);
}
// process call_in
if (message instanceof CallInMessage) {
System.out
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -