`
knight_black_bob
  • 浏览: 850914 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mima 入门

    博客分类:
  • mina
阅读更多
 

 

package com.baoy.server;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.log4j.Logger;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

import com.baoy.util.Constants;
 

public class ServerSocket {
	private static Logger log = Logger.getLogger(ServerSocket.class);
	
	private IoAcceptor acceptor;
	
	private ServerSocket(){}
	private static ServerSocket instance = new ServerSocket();
	public static ServerSocket getServerSocket(){
		return instance;
	}
	
	
	public void start(){
		 acceptor = new NioSocketAcceptor(); 
		 acceptor.getFilterChain().addLast( "logger", new LoggingFilter() ); 
		 acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8"))));
	      
	     ServerHandler handler = new ServerHandler();
	     acceptor.setHandler(handler);
	     try { 
	    	 acceptor.getSessionConfig().setReadBufferSize(Constants.SERVER_SOCKET_BUFFERSIZE);
	    	 acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, Constants.SERVER_SOCKET_HEARTBEAT_TIMEOUT);
	    	 acceptor.bind( new InetSocketAddress(Constants.SERVER_SOCKET_PORT));
		} catch (IOException e) {
			log.error("Cannot start server", e);
		}
	}
	
	public void stop(){
		if(acceptor != null){
			acceptor.unbind();
			acceptor.dispose();
		}
	}
}

 

package com.baoy.server;

import net.sf.json.JSONObject;

import org.apache.log4j.Logger;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
 



import com.baoy.message.Message;
import com.baoy.message.MessageFactory;
import com.baoy.queue.QueueHolder;
import com.baoy.queue.ServerQueue;
 

public class ServerHandler extends IoHandlerAdapter{
	private static Logger log = Logger.getLogger(ServerHandler.class);

	@Override
	public void messageReceived(IoSession session, Object json)
			throws Exception {
		super.messageReceived(session, json);
		log.debug("server recieve msg:" + json.toString());
		
		if (ServerQueue.getSession() != session)
			ServerQueue.setSession(session);
		 
		 
		
		MessageFactory facotry = new MessageFactory(); 
		Message message = facotry.build(json.toString());
		
		QueueHolder.getHolder().getQueue(QueueHolder.STC).send(message);
	}
	
}

 

package com.baoy.client;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.log4j.Logger;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

import com.baoy.util.Constants;
 

public class ClientSocket {
	private static Logger log = Logger.getLogger(ClientSocket.class);
	
	private IoAcceptor acceptor;
	
	private ClientSocket(){}
	private static ClientSocket instance = new ClientSocket();
	public static ClientSocket getServerSocket(){
		return instance;
	}
	
	
	public void start(){
		 acceptor = new NioSocketAcceptor(); 
		 acceptor.getFilterChain().addLast( "logger", new LoggingFilter() ); 
		 acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8"))));
	      
	     ClientHandler handler = new ClientHandler();
	     acceptor.setHandler(handler);
	     try { 
	    	 acceptor.getSessionConfig().setReadBufferSize(Constants.CLIENT_SOCKET_BUFFERSIZE);
	    	 acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, Constants.CLIENT_SOCKET_HEARTBEAT_TIMEOUT);
	    	 acceptor.bind( new InetSocketAddress(Constants.CLIENT_SOCKET_PORT));
		} catch (IOException e) {
			log.error("Cannot start client", e);
		}
	}
	
	public void stop(){
		if(acceptor != null){
			acceptor.unbind();
			acceptor.dispose();
		}
	}
}

 

package com.baoy.client;

import org.apache.log4j.Logger;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;

import com.baoy.message.Message;
import com.baoy.message.MessageFactory;
import com.baoy.queue.QueueHolder;
import com.baoy.queue.SessionWrap;
import com.baoy.queue.UserSessionHolder;
 

public class ClientHandler extends IoHandlerAdapter{
	private static Logger log = Logger.getLogger(ClientHandler.class);

	 
	@Override
	public void messageReceived(IoSession session, Object json)
			throws Exception {
		super.messageReceived(session, json);
		log.debug("client recieve msg:" + json.toString());
		
		
		MessageFactory facotry = new MessageFactory(); 
		Message message = facotry.build(json.toString());
		
		switch(message.getTagEnum()){
		case connection:  
			SessionWrap sessionWrapConn = new SessionWrap(message.getUserKey(), session); 
			UserSessionHolder.getHolder().putSession(sessionWrapConn); 
			session.write(message.successMessage());
			break;
		case heartbreat: 
			SessionWrap sessionWrapHB = UserSessionHolder.getHolder().getSession(message.getUserKey()); 
			if(sessionWrapHB == null){
				sessionWrapHB = new  SessionWrap(message.getUserKey(), session);
				UserSessionHolder.getHolder().putSession(sessionWrapHB);
			}else{
				sessionWrapHB.updateHeartbreatTime();
			}
			 
			QueueHolder.getHolder().getQueue(QueueHolder.CTS).send(message);
			break;
		default: 
			QueueHolder.getHolder().getQueue(QueueHolder.CTS).send(message);
			
		}
	}

 
	
}

 

package com.baoy.queue;

import org.apache.log4j.Logger;
import org.apache.mina.core.session.IoSession;

import com.baoy.message.Message; 
import com.baoy.message.MessageFactory;
import com.baoy.message.ShortMessage;
import com.baoy.server.ServerSocket; 
 

public class ServerQueue extends MessageQueue{
	private static Logger log = Logger.getLogger(ServerSocket.class);
	public ServerQueue(){
		resendSleepInterval = 1000 * 60 ;
		maxFailedCount = 15;
		
	}
	
	
	private static IoSession session = null;   
	public static IoSession getSession(){
		return ServerQueue.session;
	}

	public static void setSession(IoSession session){
		if (session == ServerQueue.session) return;
		if (ServerQueue.session != null){
			ServerQueue.session.close(false);
		}
		ServerQueue.session = session;
		log.info("server connected");
	}
	
	
	 
	public boolean doSend(Message message){ 
		log.debug(" STC -> ServerQueue doSend :"+message.toString());
		try { 
			SessionWrap session;	
			String to ="";
			if(message instanceof ShortMessage){
				to = ((ShortMessage) message).getTo();
				session = UserSessionHolder.getHolder().getSession(to);
			}else{
				session = UserSessionHolder.getHolder().getSession(message.getUserKey());
			}
			if(session == null || session.isSessionClosed()){ 
				return false;
			}
			return session.send(message);
		} catch (Exception e) { 
			return false;
		}
	}
}

 

 

  

 

 

package com.baoy.queue;

import org.apache.log4j.Logger;
import org.apache.mina.core.session.IoSession;

import com.baoy.message.Message;  
 
public class ClientQueue extends MessageQueue{
	private static Logger log = Logger.getLogger(ClientQueue.class);
	
	public ClientQueue(){
		resendSleepInterval = 1000 * 60 * 5;
		maxFailedCount = 3;
		
	}
 
	public boolean doSend(Message message){ 
		log.debug(" CTS -> ClientQueue doSend :"+message.toString());
		try {
			IoSession session = ServerQueue.getSession();
			if (session == null){ 
				return false;
			}
			session.write(message); 
			return true;
		} catch (Exception e) {
		}
		return false;
	}

}

 

 



 



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

捐助开发者

在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。



 
 
 谢谢您的赞助,我会做的更好!

 

 

 

  • 大小: 13.5 KB
  • 大小: 14.1 KB
  • 大小: 9.8 KB
  • 大小: 14.4 KB
分享到:
评论

相关推荐

    mima示例项目 mima示例项目

    1.启动服务端程序 2.Windows 下开始菜单,运行,输入cmd,回车 3.输入:telnet 127.0.0.1 3005 回车 4.输入:telnet 127.0.0.1 3005 回车 5.telnet 中随便输入一个字符串,回车 则可以看到返回的日期 ...

    mima框架的一些基本属性

    ### MIMA框架的基本属性 MIMA框架是一种网络通信框架,主要应用于Java开发环境中,用于简化网络编程过程。本文将从MIMA框架的一些基本属性出发,对其进行深入解析。 #### 标题解析:MIMA框架的一些基本属性 MIMA...

    mima框架所需的包集合

    MIMA框架,全称为"Minimalist Multithreading Model for Application",是一个轻量级的多线程框架,设计用于简化Java应用中的并发编程。在Java领域,MIMA框架以其高效、简洁的API和对线程管理的优化而受到关注。这个...

    mima.rar_LabVIEW mima_labview授权

    在本压缩包“mima.rar_LabVIEW mima_labview授权”中,我们可以推测其包含的是一个使用LabVIEW编写的名为“密码程序”的应用,这个程序主要负责系统的保护和授权功能。 LabVIEW的编程方式称为G语言,这是一种基于...

    mima.zip_SADAU6MIMA

    标题 "mima.zip_SADAU6MIMA" 暗示了这是一个与密码管理相关的压缩文件,其中可能包含了实现特定密码验证功能的代码或应用程序。描述提到“6为密码输入验证”,这表明该程序或者代码可能涉及到一个六位数字的密码系统...

    mima.zip_密码机原理图

    总的来说,"mima.zip_密码机原理图"项目提供了一个实用且有趣的教学实例,帮助我们深入理解52单片机和PROTUES软件在实际应用中的作用,同时也能锻炼我们的电路设计和编程技能。对于任何想要深入学习单片机和嵌入式...

    MIMA.rar_VHDL 密码锁_mima_四位密码锁_密码锁

    在压缩文件“MIMA”中,应该包含了实现这些功能的VHDL源代码文件。通过阅读和理解代码,我们可以更深入地学习VHDL编程和密码锁系统的设计原理。同时,对于有兴趣深入电子设计的人来说,这是一个很好的实践项目,可以...

    mimaxueyuan-mima-cloud-parent-hoxton-master.zip

    【标题】"mimaxueyuan-mima-cloud-parent-hoxton-master.zip" 是一个压缩包文件,其中包含的项目可能是某个开源项目 "mimaxueyuan" 的源代码分支 "mima-cloud-parent-hoxton" 的主分支。"master" 通常指的是Git仓库...

    mima.rar_combination lock

    通过深入分析“mima.c”,我们可以学习到如何使用编程语言(可能是C语言)来实现这些功能,包括数据结构的设计、控制流程的控制、错误处理机制的构建,以及与硬件交互的技巧。 总结起来,这个“mima.rar”中的电子...

    mima.cpp

    mima.cpp

    mima.rar_Labview登陆界面_labview_labview 界面_labview界面开发_mima

    在本案例中,"mima.rar" 提供的是一个使用 LabVIEW 开发的密码登录界面,它已经过调试,可以直接用于实际项目。这个登录界面是 LabVIEW 界面设计的一个实例,展示了如何构建用户交互的图形界面。 LabVIEW 的界面...

    中原地产金地MIMA项目营销策略报告63PPT.pptx

    【中原地产金地MIMA项目营销策略报告】的分析展示了如何通过精心策划的营销策略来提升房地产项目的市场表现。这份报告的核心围绕着总体营销策略、卖点整合、入市时机分析与选择以及整体推广节奏。 1. **总体营销...

    mima.rar_genetic

    在信息技术领域,密码学是一门至关重要的学科,它涉及到信息的安全传输、数据...通过深入研究“mima.rar_genetic”压缩包中的源代码,我们可以更好地理解这一领域的精妙之处,并可能发掘出更多潜在的安全解决方案。

    mima.rar_encryption

    综合以上信息,我们可以看出"mima.rar_encryption"是一个利用多种技术,如MFC、C++运行时库、Java和自定义DLLs,来实现用户密码安全存储的加密软件。它通过强大的加密算法保护用户数据,并提供了方便的用户界面和...

    mima.zip111

    标题中的“mima.zip111”可能是一个个人创建的压缩文件,暗示着它包含了用户的一些私人文档或项目资料。描述中提到的“个人文件存储”进一步确认了这一点,说明这个压缩包可能是用户为了备份或者传输自己的文件而...

    mima.rar_mima_电子密码_电子密码锁

    电子密码锁,有需要可以参考

    mima 核心包,已经源码

    mima 是一个开源的网络编程api ,比socket 强很多,很多事件可以灵活的运用.还可以运用session 控制客户端

    mima.rar_显示密码

    这个压缩包中的"mima"文件可能包含了实现上述功能的源代码或可执行文件,对于学习基础编程或密码处理的初学者来说,这是一个很好的学习资源。通过分析和理解代码,可以进一步提升对密码输入处理、事件驱动编程和安全...

    中原地产金地MIMA项目营销策略报告.pptx

    【中原地产金地MIMA项目营销策略报告】是关于房地产市场营销的一个详细规划,旨在通过精心设计的策略推动金地MIMA项目的成功销售。该报告主要围绕三个方面展开:总体营销策略、卖点整合以及入市时机分析与选择。 1....

    SK_mima.zip

    【标题】"SK_mima.zip"是一个基于Arduino的智能门锁项目,利用了RFID(Radio Frequency Identification,射频识别)技术以及舵机和矩阵按键等元件,旨在提供一种安全便捷的门禁解决方案。 【描述】这个项目的核心是...

Global site tag (gtag.js) - Google Analytics