设为首页 收藏本站
查看: 701|回复: 0

[经验分享] Apache Mina的学习应用(二)

[复制链接]

尚未签到

发表于 2017-1-6 10:17:59 | 显示全部楼层 |阅读模式
  继续上篇文章
  在注册自定义协议的工厂的实现类:通过继承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)";
 }
    }
 
}
  文章尚未写完,请关注下文。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-324585-1-1.html 上篇帖子: Apache Apusic集成配置负载均衡 下篇帖子: 第三次Apache tomcat集群总结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表