继续上篇文章
在注册自定义协议的工厂的实现类:通过继承MINA的 DemuxingProtocolCodecFactory实现自定义协议的编码的类。
消息结果的:
package cn.com.unutrip.java.opensource.mina.sumup.codec;
import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolDecoderOutput;
import cn.com.unutrip.java.opensource.mina.sumup.message.AbstractMessage;
import cn.com.unutrip.java.opensource.mina.sumup.message.ResultMessage;
import static cn.com.unutrip.java.opensource.mina.sumup.codec.Constants.RESULT;
import static cn.com.unutrip.java.opensource.mina.sumup.codec.Constants.RESULT_CODE_LEN;
/**
*
* @author longgangbai
*
*/
public class ResultMessageDecoder extends AbstractMessageDecoder{
private int code;
private boolean readCode;
public ResultMessageDecoder(){
super(Constants.RESULT);
}
/**
* 解析消息的body体的信息
* @param session
* @param in
* @return
*/
protected AbstractMessage decodeBody(IoSession session ,IoBuffer in)
{
if(!readCode)
{
if(in.remaining()<RESULT)
{
return null;
}
code=in.getShort();
readCode=true;
}
if(code==Constants.RESULT_OK)
{
if(in.remaining()<RESULT_CODE_LEN)
{
return null;
}
ResultMessage m=new ResultMessage();
m.setOk(true);
m.setValue(in.getInt());
readCode=false;
return m;
}else{
ResultMessage m=new ResultMessage();
m.setOk(false);
readCode=false;
return m;
}
}
@Override
public void finishDecode(IoSession arg0, ProtocolDecoderOutput arg1)
throws Exception {
}
}
package cn.com.unutrip.java.opensource.mina.sumup.codec;
import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.session.IoSession;
import cn.com.unutrip.java.opensource.mina.sumup.message.ResultMessage;
/**
* 加密消息头和消息的体的信息
* @author longgangbai
*
* @param <T>
*/
public class ResultMessageEncoder<T extends ResultMessage> extends AbstractMessageEncoder<T> {
public ResultMessageEncoder(){
super(Constants.RESULT);
}
/**
* 解析消息的体的方法的
* @param session
* @param message
* @param out
*/
protected void encodeBody(IoSession session ,T message ,IoBuffer out)
{
if(message.isOk())
{
out.putShort((short)Constants.RESULT_OK);
out.putInt(message.getValue());
}else{
out.putShort((short)Constants.RESULT_ERROR);
}
}
/**
*
* @throws Exception
*/
public void dispose()throws Exception{}
}
package cn.com.unutrip.java.opensource.mina.sumup.codec;
/**
* 定义解析的常量接口
* @author longgangbai
*
*/
public interface Constants {
public static final int TYPE_LEN = 2;
public static final int SEQUENCE_LEN = 4;
public static final int HEADER_LEN = TYPE_LEN + SEQUENCE_LEN;
public static final int BODY_LEN = 12;
public static final int RESULT = 0;
public static final int ADD = 1;
public static final int RESULT_CODE_LEN = 2;
public static final int RESULT_VALUE_LEN = 4;
public static final int ADD_BODY_LEN = 4;
public static final int RESULT_OK = 0;
public static final int RESULT_ERROR = 1;
}
package cn.com.unutrip.java.opensource.mina.sumup.codec;
import org.apache.mina.filter.codec.demux.DemuxingProtocolCodecFactory;
import cn.com.unutrip.java.opensource.mina.sumup.message.AddMessage;
import cn.com.unutrip.java.opensource.mina.sumup.message.ResultMessage;
/**
* 加密解密的解析工厂类
* @author longgangbai
*
*/
public class SumUpProtocolCodecFactory extends DemuxingProtocolCodecFactory {
public SumUpProtocolCodecFactory(boolean server)
{
//注册服务端的操作
// 备注客户端和服务端的解析和加密的相反的消息体
if(server)
{
super.addMessageDecoder(AddMessageDecoder.class);
super.addMessageEncoder(ResultMessage.class, ResultMessageEncoder.class);
//注册客户端的操作
}else{
super.addMessageEncoder(AddMessage.class,AddMessageEncoder.class);
super.addMessageDecoder(ResultMessageDecoder.class);
}
}
}
消息实体类:
package cn.com.unutrip.java.opensource.mina.sumup.message;
import java.io.Serializable;
/**
* 各种信息的基类
* @author longgangbai
*
*/
public abstract class AbstractMessage implements Serializable {
private int sequence;
public int getSequence() {
return sequence;
}
public void setSequence(int sequence) {
this.sequence = sequence;
}
}
package cn.com.unutrip.java.opensource.mina.sumup.message;
/**
* 发送信息的模型
* @author longgangbai
*
*/
public class AddMessage extends AbstractMessage {
/**
*
*/
private static final long serialVersionUID = 1L;
private int value;
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
@Override
public String toString(){
return getSequence()+"ADD ( "+value+")";
}
}
package cn.com.unutrip.java.opensource.mina.sumup.message;
/**
* 存储结构的模型的信息
* @author longgangbai
*
*/
public class ResultMessage extends AbstractMessage {
/**
*
*/
private static final long serialVersionUID = 1L;
private boolean ok;
private int value;
public boolean isOk() {
return ok;
}
public void setOk(boolean ok) {
this.ok = ok;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
@Override
public String toString(){
if(ok){
return getSequence()+" :RESULT ( " +value+")";
}else{
return getSequence()+" :RESULT ( ERROR)";
}
}
}
文章尚未写完,请关注下文。
分享到:
相关推荐
apache-mina-2.0.4 架包 源码 学习教程.apache mina是Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序...
Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的...
最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 引言 1 一. Mina入门 2 第一步.下载使用的Jar包 2 第二步.工程创建配置 2 第三步.服务端程序 3 第四步.客户端程序 6 第五步.长...
Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高...
帮助你快速学习Mina框架,Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于 TCP/IP、UDP/IP协议栈的通信框架。Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用。
Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于 TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供 JAVA 对象的序列化服务、虚拟机管道通信服务等), Mina 可以帮助我们快速开发高性能、高...
Apache的Mina(Multipurpose Infrastructure Networked Applications)是一个网络应用框架,可以帮助用户开发高性能和高扩展性的网络应用程序;它提供了一个抽象的、事件驱动的异步API,使Java NIO在各种传输协议...
最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 首先,Mina是个什么东西?看下官方网站(http://mina.apache.org/)对它的解释: Apache的Mina(Multipurpose Infrastructure ...
最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 首先,Mina是个什么东西?看下官方网站(http://mina.apache.org/)对它的解释: Apache的Mina(Multipurpose Infrastructure ...
最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 首先,Mina是个什么东西?看下官方网站(http://mina.apache.org/)对它的解释: Apache的Mina(Multipurpose Infrastructure ...
Apache的Mina(Multipurpose Infrastructure Networked Applications)是一个网络应用框架,可以帮助用户开发高性能和高扩展性的网络应用程序;它提供了一个抽象的、事件驱动的异步API,使Java NIO在各种传输协议...
Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高...
mina带心跳长链接,可实现服务间通信。socket长连接实现客户端与服务端的通信。对于通信技术学习是非常好的资料。改造后可实现企业应用
阿帕奇骆驼 是一个强大的开源集成框架,它基于具有强大Bean集成的已知企业集成模式。... 无论使用哪种传输方式,Apache Camel都可以使您使用相同的API,因此,一旦学习了API,便可以与现成提供的所有组
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
我的下个Demo准备仿照网上的QQ以及微信的DEmo,根据Apache-mina 开源Socket框架,实现一个简易的聊天交互软件。。。 特别注意:由于Demo里面用的是测试帐号,所以,如果要Demo成功运行,需要自己去人人开发者网站上面...
笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!此时此...