package safeluck.drive.evaluation.platformMessage; import com.anyun.im_lib.util.ByteUtil; public abstract class ServerProtocol { /**注册应答消息为例 * 80 版本号 * 81 00 消息id * 00 0B 消息体属性(里面消息体长度有用) * 00 00 00 00 00 00 00 00 电话 * 1E 5E 流水号 * FF 保留字节 * * * 下面是应答内容 * 00 00 * 00 * 01 02 03 04 05 06 07 08 * BD */ private short version ;//版本号 一个字节 protected short msgId;//消息id 两个字节 大端 protected short msgBodyLength; //消息体长度 private String phone; // 8个字节的string private short message_serial_num;//流水号,两个字节 private byte reserved;//保留字段 一个字节 private int pos = 0; public ServerProtocol(byte[] rspBytes) { byte[] versionByte = ByteUtil.subArray(rspBytes,pos,1); this.version = ByteUtil.getShort(versionByte); pos+=1;//消息ID开始的位置 pos += 2;// 消息属性开始的位置 byte[] msgProperty = ByteUtil.subArray(rspBytes,pos,2); msgBodyLength |= (msgProperty[1]&0x3f); pos+=2; //电话开始的字节位置 pos += 8;// liusshui号开始的位置 pos +=2;//保留字节开始的位置 pos+=1;//消息体第一个字节开始的位置 子类可以直接取pos位置 parseMsgBody(ByteUtil.subArray(rspBytes,pos,rspBytes.length-(pos))); } protected abstract void parseMsgBody(byte[] msgbodyData); }