fix协议封装挑战-工具类

原创 2013年12月03日 12:43:20

MsgUtil:

 /*
     * @headerAndBody 包含消息头+消息体,包含SOH,不包含checksum域
     */
    public static String checkSum(String headerAndBody) {
        byte[] headerAndBodyBytes = headerAndBody.getBytes();
        
        int sum = 0;

        for (byte b : headerAndBodyBytes) {
            sum += b;
        }

        String rt = String.valueOf((sum) % 256);

        /*
         * 在模256之后需要转换成固定长度为3字符串
         */
        if (rt.length() == 1) {
            rt = "00" + rt;
        } else if (rt.length() == 2) {
            rt = "0" + rt;
        } else {
        }

        return rt;
    }
    
    public static String getGMTTime(){
        SimpleDateFormat foo = new SimpleDateFormat("yyyyMMdd-HH:mm:ss.SSS", Locale.ENGLISH);
        foo.setTimeZone(TimeZone.getTimeZone("GMT"));
        return foo.format(new Date());
    }
    
    public static String[] seperate(String msgStr){
    	String[] tags=msgStr.split(BaseMsg.SOH);
    	List<Integer> seqHead=new ArrayList<Integer>();
    	List<Integer> seqTailer=new ArrayList<Integer>();
    	int indexHead=0;
    	int indexTail=0;
    	boolean firstTail=true;
    	if(tags.length<5){
    		throw new InValidDataException("消息格式错误");
    	}else{
    			String tag=tags[0];
        		String [] ts=tag.split("=");
        		if(ts.length!=2){
        			throw new InValidDataException("消息格式错误");
        		}
        		String tagId=ts[0];
        		if(!tagId.equals("8")){
        			throw new InValidDataException("消息格式错误");
        		}
        		String tag1=tags[1];
        		String [] ts1=tag1.split("=");
        		if(ts1.length!=2){
        			throw new InValidDataException("消息格式错误");
        		}
        		String tagId1=ts1[0];
        		if(!tagId1.equals("9")){
        			throw new InValidDataException("消息格式错误");
        		}
        		String tag2=tags[2];
        		String [] ts2=tag2.split("=");
        		if(ts2.length!=2){
        			throw new InValidDataException("消息格式错误");
        		}
        		String tagId2=ts2[0];
        		if(!tagId2.equals("35")){
        			throw new InValidDataException("消息格式错误");
        		}
        		String tag3=tags[tags.length-1];
        		String [] ts3=tag3.split("=");
        		if(ts3.length!=2){
        			throw new InValidDataException("消息格式错误");
        		}
        		String tagId3=ts3[0];
        		if(!tagId3.equals("10")){
        			throw new InValidDataException("消息格式错误");
        		}
    	}
    	
    	for(int i=0;i<tags.length;i++){
    		String tag=tags[i];
    		String [] ts=tag.split("=");
    		if(ts.length!=2){
    			throw new InValidDataException("消息格式错误");
    		}
    		String tagId=ts[0];
    		if(allHead.contains(tagId)){
    			seqHead.add(i);
    			indexHead=i;
    		}
    		if(allTailer.contains(tagId)){
    			seqTailer.add(i);
    			if(firstTail){
    				indexTail=i;
    			}
    			firstTail=false;
    		}
    	}
    	for(int i=0;i<seqHead.size()-1;i++){
    		if(seqHead.get(i+1)-seqHead.get(i)!=1){
    			throw new InValidDataException("消息格式错误");
    		}
    	}
    	for(int i=0;i<seqTailer.size()-1;i++){
    		if(seqTailer.get(i+1)-seqTailer.get(i)!=1){
    			throw new InValidDataException("消息格式错误");
    		}
    	}
    	int index=0;
    	indexHead++;
        while(indexHead-->0){
        	index=msgStr.indexOf("=", index+1);
        }
        index=msgStr.indexOf(BaseMsg.SOH, index);
        String head=msgStr.substring(0, index+1);
        int indexT=0;
        while(indexTail-->0){
        	indexT=msgStr.indexOf("=",indexT+1);
        }
        indexT=msgStr.indexOf(BaseMsg.SOH, indexT);
        String tailer=msgStr.substring(indexT+1);
        String body=msgStr.substring(index+1, indexT+1);
        String[]sep=new String[3];
        sep[0]=head;
        sep[1]=body;
        sep[2]=tailer;
        return sep;
    }

checkSum计算10的值,
seperate将消息,分割为头,体,尾

版权声明:本文为博主原创文章,未经博主允许不得转载。

金融信息交换协议(FIX)5.0 FIXT1.1(5)

金融信息交换协议(FIX)5.0 FIXT1.1

金融信息交换协议(FIX)5.0 FIXT1.1(2)

 4 SESSION PROTOCOL会话协议一个FIX会话定义为一个在连接双方间的的带有连续序列号的有序消息双向传输流。 单个FIX会话能够跨越多个连续(不是并行的)的物理连接。在一个维持的,单独的...

fix协议封装挑战-数据库脚本

declare @tname varchar(8000) set @tname='' select @tname=@tname+Name+','from sysobjects where xtype=...

fix协议封装挑战-数据有效性校验

数据校验要校验每个字段还有头和尾。 校验包过数据类型校验,特殊值校验。 数据类型校验统一写,特殊值校验写在每个消息实体里。 数据校验采用递归的方式,减少代码编写难度。 Tag类(类型校验没写完...

fix协议封装挑战-将一个消息实体编码为协议字符串

消息实体如下: package cs.test; import java.text.SimpleDateFormat; import java.util.Date; import cs.mina...

捕获异常、存sd卡、封装请求头体、加密map值、网络工具类、生成Json、Https协议、传log日志到服务器、app崩溃友好重启

点击打开链接,免积分下载 在集成了统计SDK(友盟统计,百度统计等)之后,有一个非常有利于测试的功能:错误分析!此功能能够将程序在运行中碰到的崩溃(runtimeException)问题反馈到服务器...

Delphi协议编解码工具类

  • 2013年08月10日 10:45
  • 1016B
  • 下载

一个简单的构造接口返回协议的工具类

对于接口协议的返回值构造.我们项目主要应用为两种,一种为业务类均继承一个基础类,基础类里面有各种返回协议的构造方法.第二种就是工具类,直接调用.本篇为第二种 package cn.com.c...

ESC/POS协议打印机工具类(java)

项目要求实现远程打印,目前设备已经到货,打印机为芯烨XP-80X热敏打印机。 一:去http://www.xprinter.net/里下载使用手册和编程手册,注:其他品牌去百度搜索官网 二:去服务与支...

浏览器 HTTP 协议缓存机制详解及Http协议预处理工具类

博主刚进入软件行业,上班早上扫代码的时候巧遇同事写的一个叫http协议预处理工具类,其中有一个setNoCache即设置不缓存的方法,涉及到Http缓存机制,但我对此并不了解,于是上网找到了两篇不错的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:fix协议封装挑战-工具类
举报原因:
原因补充:

(最多只允许输入30个字)