`

Apache Mina的学习应用(二)

阅读更多

  继续上篇文章

 在注册自定义协议的工厂的实现类:通过继承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架包及源码各pdf学习教程

    apache-mina-2.0.4 架包 源码 学习教程.apache mina是Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序...

    Apache MINA使用案例源代码

    Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的...

    Apache_Mina2.0学习笔记

    最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 引言 1 一. Mina入门 2 第一步.下载使用的Jar包 2 第二步.工程创建配置 2 第三步.服务端程序 3 第四步.客户端程序 6 第五步.长...

    Apache Mina Server 2.0 参考手册

    Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高...

    Apache Mina Server 2.0 中文参考手册

    帮助你快速学习Mina框架,Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于 TCP/IP、UDP/IP协议栈的通信框架。Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用。

    Apache-Mina-Server-2.0中文参考手册V1.0.docx

    Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于 TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供 JAVA 对象的序列化服务、虚拟机管道通信服务等), Mina 可以帮助我们快速开发高性能、高...

    Apache_Mina2.0学习笔记(初版).doc

    Apache的Mina(Multipurpose Infrastructure Networked Applications)是一个网络应用框架,可以帮助用户开发高性能和高扩展性的网络应用程序;它提供了一个抽象的、事件驱动的异步API,使Java NIO在各种传输协议...

    mina实例、资源包、学习文档

    最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 首先,Mina是个什么东西?看下官方网站(http://mina.apache.org/)对它的解释: Apache的Mina(Multipurpose Infrastructure ...

    mina开发示例

    最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 首先,Mina是个什么东西?看下官方网站(http://mina.apache.org/)对它的解释: Apache的Mina(Multipurpose Infrastructure ...

    mina2.0初学教程

    最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 首先,Mina是个什么东西?看下官方网站(http://mina.apache.org/)对它的解释: Apache的Mina(Multipurpose Infrastructure ...

    Mina2.0学习笔记(完整版).doc

    Apache的Mina(Multipurpose Infrastructure Networked Applications)是一个网络应用框架,可以帮助用户开发高性能和高扩展性的网络应用程序;它提供了一个抽象的、事件驱动的异步API,使Java NIO在各种传输协议...

    Mina所需要的第三方jar

    Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高...

    mina带心跳长链接+socket长链接+线程池

    mina带心跳长链接,可实现服务间通信。socket长连接实现客户端与服务端的通信。对于通信技术学习是非常好的资料。改造后可实现企业应用

    neowal1:my_first_github_project

    阿帕奇骆驼 是一个强大的开源集成框架,它基于具有强大Bean集成的已知企业集成模式。... 无论使用哪种传输方式,Apache Camel都可以使您使用相同的API,因此,一旦学习了API,便可以与现成提供的所有组

    JAVA上百实例源码以及开源项目源代码

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    根据仿人人客户端教程,编程实现Demo(四)---个人主页的实现(已完结)

    我的下个Demo准备仿照网上的QQ以及微信的DEmo,根据Apache-mina 开源Socket框架,实现一个简易的聊天交互软件。。。 特别注意:由于Demo里面用的是测试帐号,所以,如果要Demo成功运行,需要自己去人人开发者网站上面...

    JAVA上百实例源码以及开源项目

    笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!此时此...

Global site tag (gtag.js) - Google Analytics