mima 入门

简介:     package com.baoy.server; import java.io.IOException; import java.net.InetSocketAddress; import java.
 

 

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捐助),没钱捧个人场,谢谢各位。



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

 

 

 

目录
相关文章
|
8月前
|
设计模式 算法 架构师
软考软件设计师:是否值得报考?详尽分析与建议
软考软件设计师是我国IT领域权威认证之一,涵盖软件设计、系统分析、架构设计等多方面知识。
335 1
|
安全 Java API
gateway基本配置
【5月更文挑战第7天】API Gateway在微服务架构中起着关键作用,作为客户端与后端服务的统一入口,负责路由转发、安全控制和负载均衡。本文深入介绍了API Gateway的基本配置、常见问题、跨平台配置差异及避免错误的方法。内容包括路由和过滤器配置、动态路由、安全性配置、限流和熔断机制,以及自定义过滤器和服务降级策略。通过示例代码和实践指南,帮助读者理解和部署API Gateway。
728 3
|
开发工具 开发者 git
使用git和github进行协同开发流程
目录 前言 仓库(Repository) 源仓库 开发者仓库 分支(Branch) 永久性分支 暂时性分支 工作流(workflow) 总结 参考资料 前言 (本文假设各位已经对基本git的基本概念、操作有一定的理解,如无相关git知识,可以参考Pro Git这本书进行相关的学习和练习) 很多项目开发都会采用git这一优秀的分布式版本管理工具进行项目版本管理,使用github开源平台作为代码仓库托管平台。
2445 0
|
SQL 自然语言处理 前端开发
网安研发之初识抽象语法树
抽象语法树(Abstract Syntax Tree,简称AST)是计算机科学中一种用于表示程序源代码结构的树状数据结构。它是源代码经过词法分析和语法分析之后生成的一种中间表示形式。 AST以树的形式表示程序的语法结构,其中每个节点代表源代码中的一个语法元素,如表达式、语句、函数等。节点之间通过父子关系和兄弟关系建立连接,形成一棵层次结构的树。 AST的节点类型通常与编程语言的语法规则相关,每个节点存储了相应语法结构的信息,如标识符、操作符、常量等。通过遍历和分析AST,可以进行语法检查、代码优化、代码生成等编译器和解释器相关的任务。
300 0
|
小程序 安全 开发工具
uniapp项目实战系列(2):新建项目,项目搭建,微信开发工具的配置
uniapp项目实战系列(2):新建项目,项目搭建,微信开发工具的配置
219 2
Lombok - @Builder导致初始化字段无效解决办法
Lombok - @Builder导致初始化字段无效解决办法
858 0
|
4天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
324 102