继续上篇文章
在注册自定义协议的工厂的实现类:通过继承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是一个开源框架,主要用于构建高性能、高可用性的网络应用程序。这个压缩包包含了全面的学习资料,适合初学者深入理解Mina的原理和使用方法。其中,中文参考手册的加入使得学习过程更加友好,便于非英语...
Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,用于构建高性能、高可用性的网络应用程序。MINA 提供了一种简单而强大的API,开发者可以使用它来处理TCP/IP和UDP/IP协议,如...
对于希望提高网络应用性能或熟悉Java NIO编程的开发者来说,Apache Mina 2.0.4的源码分析是一次宝贵的学习机会。你可以通过阅读源码学习到如何有效地处理高并发场景,如何设计和实现高效的网络协议,以及如何利用...
Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,专为高性能、异步网络应用程序设计。MINA 提供了一套高级的网络通信抽象层,简化了开发过程,特别是对于处理TCP/IP和UDP/IP...
Apache Mina是一个高度可扩展的网络通信框架,主要用于构建高性能、高效率的服务端应用程序。...通过学习和使用"Mina帮助文档",开发者可以更好地理解和利用这个框架,构建出高效、稳定的网络应用。
Apache MINA是一个高性能、异步事件驱动的网络应用程序框架,主要设计用于简化开发服务器端的高性能网络应用。这个框架提供了一种抽象层,允许开发者使用相同的API处理多种不同的传输协议,如TCP/IP、UDP/IP以及SSL/...
通过深入学习和实践这个Apache Mina入门Demo,你将掌握如何利用Mina构建网络应用,并了解其核心特性和工作原理,这对于从事Java网络编程或者需要处理大规模并发连接的开发者来说是非常有价值的。
Apache MINA(Multipurpose Infrastructure for Network Applications)是一个开源框架,主要设计用于简化网络应用程序的开发,尤其是基于TCP和UDP协议的应用。它提供了高度可扩展和高性能的非阻塞I/O模型,使得...
Apache MINA(Multipurpose Infrastructure for Network Applications)是一个高性能、异步事件驱动的网络应用程序框架,主要用于简化开发高质量的网络服务。这个框架适用于多种协议,如TCP/IP和UDP/IP,以及NIO(非...
apache-mina-2.0.4 架包 源码 学习教程.apache mina是Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序...
Apache MINA 2.0 是一款高性能且易于使用的网络应用程序框架,它简化了开发人员在网络编程方面的负担,允许开发者专注于应用程序的核心功能,而不是底层的网络细节。MINA 2.0 支持多种网络协议,包括 TCP 和 UDP,...
Apache Mina Server 2.0 是一款高性能、...此外,下载的压缩包文件“minaTest”可能包含示例代码或测试项目,可以作为学习和实践Apache Mina的好材料。通过这些实践,你可以加深对Mina的理解,并将其应用到实际项目中。
Apache Mina是一个高度可扩展的网络通信框架,主要用于构建高性能、高并发的网络应用程序,如服务器端应用。它提供了一种简单而强大的编程模型,使得开发者可以专注于业务逻辑,而不是底层的网络通信细节。Spring...
Apache Mina是一个强大的开源项目,专门设计用于构建网络应用程序。这个框架的核心目标是...通过深入学习和实践,开发者可以创建出满足各种需求的网络服务,无论是在企业级应用还是小型项目中,Mina都能发挥重要作用。
Apache Mina是一个开源项目,主要用于构建高性能、高可用性的网络应用程序。这个例子是关于如何使用Apache Mina实现一个简单的服务端和客户端通信的示例。在这个案例中,`MinaTimeServer`是服务端程序,它负责监听...
Apache Mina 2是Apache项目下的一款高性能、高可扩展性的网络应用框架,它简化了Java NIO编程,使得开发者能够更加轻松地构建复杂的网络应用。Mina通过提供一个抽象的、事件驱动的异步API,支持多种传输协议,包括但...
Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,专为开发高性能和高可用性的网络应用程序而设计。MINA提供了异步的、事件驱动的网络应用编程接口(API),适用于TCP和UDP协议...
总的来说,Apache Mina通过其过滤器架构和处理器模型,为开发网络应用程序提供了强大的抽象。通过对`MinaTimeServer`的源代码分析,我们可以看到如何配置服务器,设置过滤器,处理网络事件,并与客户端进行有效通信...
Apache Mina是一个开源的Java框架,它简化了网络应用程序的开发,特别是对于TCP/IP和UDP协议的应用。在本文中,我们将通过一个简单的实例来探讨如何使用Apache Mina进行网络通信。 首先,Apache Mina的核心是它的...