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);
|
}
|