⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serversessionhandler.java

📁 利用mina框架写的一个通信实例。初学者的一个好教程。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 *   @(#) $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 + -