endian11
2019-12-30 ec8c6028d44e730885fd9a03994732baee260e94
添加消息对象(初步)
2个文件已修改
6个文件已添加
262 ■■■■■ 已修改文件
app/src/main/java/safeluck/drive/evaluation/bean/DriveExamProtocol.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/bean/GainStuMessage.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/bean/KeepaliveMessage.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/bean/RegisterMessage.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/bean/StartExamMessage.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/cEventCenter/CEvent.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/cEventCenter/ObjectPool.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/cEventCenter/PooledObject.java 15 ●●●●● 补丁 | 查看 | 原始文档 | 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();
}