app/src/main/java/safeluck/drive/evaluation/bean/DriveExamProtocol.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/safeluck/drive/evaluation/bean/GainStuMessage.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/safeluck/drive/evaluation/bean/KeepaliveMessage.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/safeluck/drive/evaluation/bean/RegisterMessage.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/safeluck/drive/evaluation/bean/StartExamMessage.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/safeluck/drive/evaluation/cEventCenter/CEvent.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/safeluck/drive/evaluation/cEventCenter/ObjectPool.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/safeluck/drive/evaluation/cEventCenter/PooledObject.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
app/src/main/java/safeluck/drive/evaluation/bean/DriveExamProtocol.java
@@ -18,11 +18,13 @@ 标识位 消息头 消息体 校验码 标识位 0x7E 0x7E ======================**/ // 标识位 // 标识位(字节流开始) private byte MESSAGE_HEAD = 0x7e; //标识位 //标识位(字节流结束) private byte MESSAGE_TAIL = 0x7e; //校验码 先暂时写死 //校验码指从消息头开始,同后一字节异或,直到校验码前一个字节,占用一个字节 //校验码 先暂时写死 todo private byte checkCode = 0x78; @@ -32,20 +34,32 @@ //消息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(); @@ -57,6 +71,10 @@ this.msg_id = msg_id; } /** * 消息转为byte数组 7E......7E * @return */ public byte[] toBytes(){ byte[] desBytes = new byte[1+16+2+1+1]; int pos = 0; @@ -72,25 +90,25 @@ 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++; //消息体 app/src/main/java/safeluck/drive/evaluation/bean/GainStuMessage.java
New file @@ -0,0 +1,26 @@ package safeluck.drive.evaluation.bean; /** * 获取学员信息消息(发送身份证ID上去给平台) * MyApplication2 * Created by lzw on 2019/12/19. 18:26:35 * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ public class GainStuMessage extends DriveExamProtocol { // TODO: 2019/12/19 /** * 构造函数 * * @param msg_id 消息ID */ public GainStuMessage(short msg_id) { super(msg_id); } @Override protected byte[] createMessageBody() { return new byte[0]; } } app/src/main/java/safeluck/drive/evaluation/bean/KeepaliveMessage.java
New file @@ -0,0 +1,22 @@ package safeluck.drive.evaluation.bean; /** * 心跳消息 * MyApplication2 * Created by lzw on 2019/12/19. 18:24:47 * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ public class KeepaliveMessage extends DriveExamProtocol { // TODO: 2019/12/19 public KeepaliveMessage(short msg_id) { super(msg_id); } @Override protected byte[] createMessageBody() { return new byte[0]; } } app/src/main/java/safeluck/drive/evaluation/bean/RegisterMessage.java
@@ -1,6 +1,7 @@ package safeluck.drive.evaluation.bean; /** * 注册消息 * MyApplication2 * Created by lzw on 2019/12/17. 17:51:44 * 邮箱:632393724@qq.com app/src/main/java/safeluck/drive/evaluation/bean/StartExamMessage.java
New file @@ -0,0 +1,25 @@ package safeluck.drive.evaluation.bean; /** * 给平台发送开始考试消息 * MyApplication2 * Created by lzw on 2019/12/19. 18:28:47 * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ public class StartExamMessage extends DriveExamProtocol { // TODO: 2019/12/19 /** * 构造函数 * * @param msg_id 消息ID */ public StartExamMessage(short msg_id) { super(msg_id); } @Override protected byte[] createMessageBody() { return new byte[0]; } } app/src/main/java/safeluck/drive/evaluation/cEventCenter/CEvent.java
New file @@ -0,0 +1,70 @@ package safeluck.drive.evaluation.cEventCenter; /** * 事件模型,需要传递的消息事件对象 * MyApplication2 * Created by lzw on 2019/12/30. 17:00:54 * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ public class CEvent implements PooledObject { //主题 private String topic; private int msgCode;//消息类型 private int resultCode;//预留参数 private Object obj;//回调返回数据 public CEvent() { } public CEvent(String topic, int msgCode, int resultCode, Object obj) { this.topic = topic; this.msgCode = msgCode; this.resultCode = resultCode; this.obj = obj; } public String getTopic() { return topic; } public void setTopic(String topic) { this.topic = topic; } public int getMsgCode() { return msgCode; } public void setMsgCode(int msgCode) { this.msgCode = msgCode; } public int getResultCode() { return resultCode; } public void setResultCode(int resultCode) { this.resultCode = resultCode; } public Object getObj() { return obj; } public void setObj(Object obj) { this.obj = obj; } @Override public void reset() { this.obj = null; this.msgCode = 0; this.resultCode = 0; this.topic = null; } } app/src/main/java/safeluck/drive/evaluation/cEventCenter/ObjectPool.java
New file @@ -0,0 +1,55 @@ package safeluck.drive.evaluation.cEventCenter; /** * 自定义的对象池 * MyApplication2 * Created by lzw on 2019/12/30. 17:06:49 * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ public abstract class ObjectPool<T extends PooledObject> { private T[] mContainer;//对象容器 private final Object LOCK = new Object();//对象锁 private int length;//每次返回对象都放到数据末端,length表示前面可用对象数 public ObjectPool(int capacity) { mContainer = createObjPool(capacity); } /** * 创建对象池 * @param capacity 最大限度容量 * @return */ protected abstract T[] createObjPool(int capacity) ; /** * 创建一个新的对象 * @return */ protected abstract T createNewObj(); public final T get(){ //先从池中找到空闲的对象,如果没有,则重新创建一个对象 T obj = findFreeObject(); if (null == obj){ obj = createNewObj(); }else{ obj.reset(); } return obj; } /** * 从池中找到空闲的对象 * @return */ private T findFreeObject() { return null; } } app/src/main/java/safeluck/drive/evaluation/cEventCenter/PooledObject.java
New file @@ -0,0 +1,15 @@ package safeluck.drive.evaluation.cEventCenter; /** * 对象池 * MyApplication2 * Created by lzw on 2019/12/30. 16:59:40 * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ public interface PooledObject { /** * 恢复到默认状态 */ void reset(); }