| | |
| | | 标识位 消息头 消息体 校验码 标识位 |
| | | 0x7E 0x7E |
| | | ======================**/ |
| | | // 标识位 |
| | | // 标识位(字节流开始) |
| | | private byte MESSAGE_HEAD = 0x7e; |
| | | //标识位 |
| | | //标识位(字节流结束) |
| | | private byte MESSAGE_TAIL = 0x7e; |
| | | //校验码 先暂时写死 |
| | | |
| | | //校验码指从消息头开始,同后一字节异或,直到校验码前一个字节,占用一个字节 |
| | | //校验码 先暂时写死 todo |
| | | private byte checkCode = 0x78; |
| | | |
| | | |
| | |
| | | //消息ID |
| | | private short msg_id; |
| | | |
| | | //消息体属性 |
| | | private int msg_property; |
| | | |
| | | //终端手机号 字符串长度必须为16 |
| | | /** 消息体属性格式结构表 |
| | | 15 14 13 | 12 11 10 | 9 8 7 6 5 4 3 2 1 0 |
| | | 保留 数据加密方式 消息体长度 |
| | | **/ |
| | | //消息体属性 |
| | | private short msg_property =2; |
| | | |
| | | /** |
| | | * 终端手机号 字符串长度必须为16 |
| | | **/ |
| | | private String phoneOnTerminal = "0008618513021245"; |
| | | //13 消息流水号 WORD 按发送顺序从0开始循环累加 |
| | | |
| | | /** |
| | | * |
| | | * 13 消息流水号 WORD 按发送顺序从0开始循环累加 |
| | | * |
| | | */ |
| | | public static short msg_serial_num=0; |
| | | |
| | | //15 预留 BYTE 预留 |
| | | private byte reserve; |
| | | private byte reserve = 0x00; |
| | | /***===========消息头结束=============***/ |
| | | |
| | | /** |
| | | * 消息体 |
| | | * 消息体 需要子类实现 |
| | | */ |
| | | protected abstract byte[] createMessageBody(); |
| | | |
| | |
| | | this.msg_id = msg_id; |
| | | } |
| | | |
| | | /** |
| | | * 消息转为byte数组 7E......7E |
| | | * @return |
| | | */ |
| | | public byte[] toBytes(){ |
| | | byte[] desBytes = new byte[1+16+2+1+1]; |
| | | int pos = 0; |
| | |
| | | System.arraycopy(protoVersion,0,desBytes,pos,protoVersion.length); |
| | | pos +=protoVersion.length; |
| | | |
| | | //消息ID |
| | | //消息ID |
| | | byte[] msgIdBytes = ByteUtil.shortGetBytes(msg_id); |
| | | System.arraycopy(msgIdBytes,0,desBytes,pos,msgIdBytes.length); |
| | | pos+=msgIdBytes.length; |
| | | |
| | | //消息体属性 |
| | | byte[] msg_pro_bytes = ByteUtil.shortGetBytes((short)2); |
| | | //消息体属性 |
| | | byte[] msg_pro_bytes = ByteUtil.shortGetBytes(msg_property); |
| | | System.arraycopy(msg_pro_bytes,0,desBytes,pos,msg_pro_bytes.length); |
| | | pos+=msg_pro_bytes.length; |
| | | //终端手机号 |
| | | byte[] phoneBytes = ByteUtil.str2Bcd(phoneOnTerminal); |
| | | System.arraycopy(phoneBytes,0,desBytes,pos,phoneBytes.length); |
| | | pos+=phoneBytes.length; |
| | | //消息流水号 |
| | | //消息流水号 |
| | | byte[] msg_serialNum = ByteUtil.shortGetBytes(msg_serial_num++); |
| | | System.arraycopy(msg_serialNum,0,desBytes,pos,msg_serialNum.length); |
| | | pos+=msg_serialNum.length; |
| | | //保留 |
| | | desBytes[pos] = 0; |
| | | //保留byte |
| | | desBytes[pos] = reserve; |
| | | pos++; |
| | | |
| | | //消息体 |