fix协议封装挑战-工具类

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协议封装挑战-工具类)