lizhanwei
2020-02-14 4e307b0d89c9a84916bbbc2119e41d34c6badc13
修改平台协议文档;调通注册消息;
11个文件已修改
278 ■■■■■ 已修改文件
Documents/驾考模拟系统业务平台协议设计xc20200211.doc 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/bean/RegisterMessage.java 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/SignalConfigFragment.java 111 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/im/IMSEventListener.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/im/IMessageProcessor.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/im/MessageProcessor.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/util/Utils.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
im_lib/src/main/java/com/anyun/im_lib/MsgDispatcher.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
im_lib/src/main/java/com/anyun/im_lib/netty/TCPReadHandler.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
im_lib/src/main/java/com/anyun/im_lib/util/ByteUtil.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Documents/¼Ý¿¼Ä£ÄâϵͳҵÎñƽ̨ЭÒéÉè¼Æxc20200211.doc
Binary files differ
app/src/main/java/safeluck/drive/evaluation/bean/RegisterMessage.java
@@ -1,5 +1,12 @@
package safeluck.drive.evaluation.bean;
import android.text.TextUtils;
import com.anyun.im_lib.util.ByteUtil;
import static com.anyun.im_lib.util.ByteUtil.shortGetBytes;
/**
 * æ³¨å†Œæ¶ˆæ¯
 * MyApplication2
@@ -9,7 +16,42 @@
 */
public class RegisterMessage extends DriveExamProtocol {
    private static final int BODY_LENGTH = 2;
    /**
     * 1.1.1    ç»ˆç«¯æ³¨å†Œ
     * æ¶ˆæ¯ID:0x0100。
     * èµ·å§‹å­—节
     * å­—段
     * æ•°æ®ç±»åž‹
     * æè¿°åŠè¦æ±‚
     * 0
     * çœåŸŸID
     * WORD
     * ç»ˆç«¯æ‰€åœ¨åœ°çœID
     * 2
     * å¸‚县域ID
     * WORD
     * ç»ˆç«¯æ‰€åœ¨åœ°å¸‚ID
     * 4
     * ç»ˆç«¯åž‹å·
     * BYTE[20]
     * 20个字节,此终端型号由制造商自行定义,位数不足20位的,后补“0X00”
     * 24
     * ç»ˆç«¯å‡ºåŽ‚åºåˆ—å·
     * BYTE[8]
     * 8个字节,由大写字母和数字组成,此终端ID由制造商自行定义,位数不足时,后补“0X00”
     * 32
     * IMEI
     * BYTE[15]
     * å›½é™…移动设备标识,ASCII码
     */
    private static final int BODY_LENGTH = 55;
    private short proviceId;
    private short cityid;
    private String model;//终端型号
    private String sn;//出厂序列号
    private String imei;//
    /**
     * æž„造函数
     *
@@ -17,6 +59,50 @@
     */
    public RegisterMessage(short msg_id) {
        super(msg_id);
    }
    public static int getBodyLength() {
        return BODY_LENGTH;
    }
    public short getProviceId() {
        return proviceId;
    }
    public void setProviceId(short proviceId) {
        this.proviceId = proviceId;
    }
    public short getCityid() {
        return cityid;
    }
    public void setCityid(short cityid) {
        this.cityid = cityid;
    }
    public String getModel() {
        return model;
    }
    public void setModel(String model) {
        this.model = model;
    }
    public String getSn() {
        return sn;
    }
    public void setSn(String sn) {
        this.sn = sn;
    }
    public String getImei() {
        return imei;
    }
    public void setImei(String imei) {
        this.imei = imei;
    }
    @Override
@@ -27,9 +113,30 @@
    @Override
    protected byte[] createMessageBody() {
        int pos = 0;
        byte[] messageBody = new byte[BODY_LENGTH];
        messageBody[0] = 0x65;
        messageBody[1] = 0x67;
        //省域ID
        byte[] provinceIdBytes = ByteUtil.shortGetBytes(proviceId);
        System.arraycopy(provinceIdBytes,0,messageBody,pos,provinceIdBytes.length);
        pos += provinceIdBytes.length;
        //市域ID
        byte[] cityIdBytes = ByteUtil.shortGetBytes(cityid);
        System.arraycopy(cityIdBytes,0,messageBody,pos,cityIdBytes.length);
        pos += cityIdBytes.length;
        //model
        byte[] modelBytes = !TextUtils.isEmpty(model)?model.getBytes():"".getBytes();
        System.arraycopy(modelBytes,0,messageBody,pos,modelBytes.length);
        pos += 20;
        //sn
        byte[] snBytes = !TextUtils.isEmpty(sn)?sn.getBytes():"".getBytes();
        System.arraycopy(snBytes,0,messageBody,pos,snBytes.length);
        pos += 16;
        //IMEI
        byte[] imeiBytes = !TextUtils.isEmpty(imei)?imei.getBytes():"".getBytes();
        System.arraycopy(imeiBytes,0,messageBody,pos,imeiBytes.length);
        return messageBody;
    }
}
app/src/main/java/safeluck/drive/evaluation/fragment/SignalConfigFragment.java
@@ -2,12 +2,17 @@
import android.content.Context;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
@@ -18,6 +23,7 @@
import androidx.appcompat.widget.Toolbar;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import me.yokeyword.fragmentation.SupportFragment;
@@ -38,6 +44,7 @@
    private Toolbar mToobar;
    private ListView listView;
    private LinearLayout linearLayout;
    private static final String TAG = SignalConfigFragment.class.getSimpleName();
    public static SupportFragment newInstance(){
        return new SignalConfigFragment();
    }
@@ -71,13 +78,13 @@
        signalConfiglist .add(new SignalConfigBean("安全带","脚刹",false,true,true,false,3,4));
        signalConfiglist .add(new SignalConfigBean("熄火","绕车1",false,true,true,false,5,6));
        signalConfiglist .add(new SignalConfigBean("门锁","绕车2",false,true,true,false,7,8));
        signalConfiglist .add(new SignalConfigBean("手刹","离合",true,false,true,false,1,2));
        signalConfiglist .add(new SignalConfigBean("左转向","1æ¡£",false,true,true,false,3,4));
        signalConfiglist .add(new SignalConfigBean("右转向","2æ¡£",false,true,true,false,5,6));
        signalConfiglist .add(new SignalConfigBean("近光灯","3æ¡£",false,true,true,false,7,8));
        signalConfiglist .add(new SignalConfigBean("远光灯","4æ¡£",false,true,true,false,7,8));
        signalConfiglist .add(new SignalConfigBean("雾灯","雨刷",false,true,true,false,7,8));
        signalConfiglist .add(new SignalConfigBean("示宽灯","无",false,true,true,false,7,8));
        signalConfiglist .add(new SignalConfigBean("手刹","离合",true,false,true,false,9,10));
        signalConfiglist .add(new SignalConfigBean("左转向","1æ¡£",false,true,true,false,11,12));
        signalConfiglist .add(new SignalConfigBean("右转向","2æ¡£",false,true,true,false,13,14));
        signalConfiglist .add(new SignalConfigBean("近光灯","3æ¡£",false,true,true,false,15,16));
        signalConfiglist .add(new SignalConfigBean("远光灯","4æ¡£",false,true,true,false,17,18));
        signalConfiglist .add(new SignalConfigBean("雾灯","雨刷",false,true,true,false,19,20));
        signalConfiglist .add(new SignalConfigBean("示宽灯","无",false,true,true,false,21,22));
        listView.setAdapter(mySignalsAdapter);
@@ -111,19 +118,97 @@
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder viewHolder;
        public View getView(final int position, View convertView, ViewGroup parent) {
            final ViewHolder viewHolder;
            if (convertView == null){
                convertView = LayoutInflater.from(context).inflate(R.layout.layout_signal_conf_item,null);
                viewHolder = new ViewHolder(convertView);
                viewHolder.editText1.addTextChangedListener(new TextWatcher() {
                    @Override
                    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                    }
                    @Override
                    public void onTextChanged(CharSequence s, int start, int before, int count) {
                    }
                    @Override
                    public void afterTextChanged(Editable s) {
                        Log.i(TAG, "et1 afterTextChanged: "+s.toString());
                        String str = s.toString();
                        int a = Integer.parseInt(str);
                        signalConfiglist.get(position).setPort_one(a);
                    }
                });
                viewHolder.editText2.addTextChangedListener(new TextWatcher() {
                    @Override
                    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                    }
                    @Override
                    public void onTextChanged(CharSequence s, int start, int before, int count) {
                    }
                    @Override
                    public void afterTextChanged(Editable s) {
                        Log.i(TAG, "et2 afterTextChanged: "+s.toString());
                        String str = s.toString();
                        int a = Integer.parseInt(str);
                        signalConfiglist.get(position).setPort_two(a);
                    }
                });
                viewHolder.checkBox3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                        SignalConfigBean signalConfigBean = (SignalConfigBean) viewHolder.checkBox3.getTag();
                        signalConfigBean.setThree(isChecked);
                    }
                });
                viewHolder.checkBox4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                        SignalConfigBean signalConfigBean = (SignalConfigBean) viewHolder.checkBox4.getTag();
                        signalConfigBean.setFour(isChecked);
                    }
                });viewHolder.checkBox2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                        SignalConfigBean signalConfigBean = (SignalConfigBean) viewHolder.checkBox2.getTag();
                        signalConfigBean.setTwo(isChecked);
                    }
                });viewHolder.checkBox1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                        SignalConfigBean signalConfigBean = (SignalConfigBean) viewHolder.checkBox1.getTag();
                        signalConfigBean.setOne(isChecked);
                    }
                });
                convertView.setTag(viewHolder);
                viewHolder.checkBox1.setTag(signalConfiglist.get(position));
                viewHolder.checkBox2.setTag(signalConfiglist.get(position));
                viewHolder.checkBox3.setTag(signalConfiglist.get(position));
                viewHolder.checkBox4.setTag(signalConfiglist.get(position));
            }else {
                viewHolder = (ViewHolder) convertView.getTag();
                viewHolder.checkBox1.setTag(signalConfiglist.get(position));
                viewHolder.checkBox2.setTag(signalConfiglist.get(position));
                viewHolder.checkBox3.setTag(signalConfiglist.get(position));
                viewHolder.checkBox4.setTag(signalConfiglist.get(position));
            }
            SignalConfigBean signalConfigItem = getItem(position);
            viewHolder.editText1.setTag(position);
            viewHolder.editText2.setTag(position);
            final SignalConfigBean signalConfigItem = getItem(position);
            viewHolder.textView1.setText(signalConfigItem.getSignal_name_first());
            viewHolder.textView2.setText(signalConfigItem.getSignal_name_second());
            viewHolder.editText1.setText(String.valueOf(signalConfigItem.getPort_one()));
            viewHolder.editText2.setText(String.valueOf(signalConfigItem.getPort_two()));
@@ -147,7 +232,7 @@
            TextView textView2;
            public ViewHolder(View convertView) {
            public ViewHolder(final View convertView) {
                checkBox1 = convertView.findViewById(R.id.signal_check_1);
                checkBox2 = convertView.findViewById(R.id.signal_check_2);
                checkBox3 = convertView.findViewById(R.id.signal_check_3);
@@ -162,4 +247,6 @@
        }
    }
}
app/src/main/java/safeluck/drive/evaluation/im/IMSEventListener.java
@@ -22,7 +22,7 @@
    @Override
    public void dispatchMsg(Object message) {
        MessageProcessor.getInstance().receiveMsg((String)message);
        MessageProcessor.getInstance().receiveMsg((byte[])message);
    }
    @Override
@@ -71,6 +71,12 @@
    @Override
    public byte[] getRegisterMessage() {
        return new RegisterMessage((short) 0x802).toBytes();
        RegisterMessage registerMessage = new RegisterMessage((short)0x0100);
        registerMessage.setCityid((short) 1);
        registerMessage.setProviceId((short)23);
        registerMessage.setImei("460123874561");
        registerMessage.setModel("123");
        registerMessage.setSn("0314200100000004");
        return registerMessage.toBytes();
    }
}
app/src/main/java/safeluck/drive/evaluation/im/IMessageProcessor.java
@@ -7,6 +7,6 @@
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public interface IMessageProcessor {
    void receiveMsg(String message);
    void receiveMsg(byte[] message);
    void sendMessage(String msg);
}
app/src/main/java/safeluck/drive/evaluation/im/MessageProcessor.java
@@ -2,7 +2,10 @@
import android.util.Log;
import com.anyun.im_lib.util.ByteUtil;
import safeluck.drive.evaluation.util.CThreadPoolExecutor;
import safeluck.drive.evaluation.util.Utils;
/**
 * MyApplication2
@@ -27,8 +30,13 @@
    }
    @Override
    public void receiveMsg(String message) {
        Log.i(TAG, "receiveMsg: "+message);
    public void receiveMsg(byte[] message) {
        byte[] datas = Utils.parseMsg(message);
        Log.i(TAG, "receiveMsg: "+ ByteUtil.byte2HexStr(datas));
        byte checkcolde=Utils.calCheckCode(ByteUtil.subArray(datas,0,datas.length-1));
        if (checkcolde == datas[datas.length-1]){
            Log.i(TAG, "receiveMsg: æ¶ˆæ¯æ­£ç¡®");
        }
    }
    @Override
app/src/main/java/safeluck/drive/evaluation/util/Utils.java
@@ -68,8 +68,11 @@
            }
        }
        temp[y++] = 0x7e;
        Log.i(TAG,"转义过后:"+ ByteUtil.byte2hex(temp));
        return temp;
        byte[] tranferbytes = new byte[y];
        System.arraycopy(temp,0,tranferbytes,0,y);
        Log.i(TAG,"转义过后:"+ ByteUtil.byte2hex(tranferbytes));
        return tranferbytes;
    }
    /**
im_lib/src/main/java/com/anyun/im_lib/MsgDispatcher.java
@@ -16,7 +16,7 @@
        this.onEventListener = listener;
    }
    public void receivedMsg(String msg){
    public void receivedMsg(byte[] msg){
        // TODO: 2019/12/12
        if (onEventListener != null){
            onEventListener.dispatchMsg(msg);
im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java
@@ -11,6 +11,7 @@
import com.anyun.im_lib.interf.IMSClientInteface;
import com.anyun.im_lib.listener.IMSConnectStatusCallback;
import com.anyun.im_lib.listener.OnEventListener;
import com.anyun.im_lib.util.ByteUtil;
import java.nio.ByteBuffer;
import java.util.Vector;
@@ -220,6 +221,7 @@
                try {
                    ByteBuf byteBuf = ByteBufAllocator.DEFAULT.ioBuffer();
                    byteBuf.writeBytes(mOnEventListener.getRegisterMessage());
                    Log.i(TAG, "发送消息: "+ ByteUtil.byte2HexStr(mOnEventListener.getRegisterMessage()));
                    channel.writeAndFlush(byteBuf);
                } catch (Exception e) {
                    Log.i(TAG, "发送消息失败,reason="+e.getMessage()+"\t");
im_lib/src/main/java/com/anyun/im_lib/netty/TCPReadHandler.java
@@ -63,8 +63,8 @@
        buf.readBytes(req);
        Log.i(TAG, "channelRead hex str: "+ ByteUtil.byte2HexStr(req));
        String str = new String(req, "UTF-8");
        imsClient.getMsgDispatcher().receivedMsg(   str  );
        if (req!=null && req.length>0)
        imsClient.getMsgDispatcher().receivedMsg(   req );
    }
    @Override
im_lib/src/main/java/com/anyun/im_lib/util/ByteUtil.java
@@ -190,8 +190,8 @@
     */
    public static byte[] shortGetBytes(short data) {
        byte[] bytes = new byte[2];
        bytes[0] = (byte) (data & 0xff);
        bytes[1] = (byte) ((data & 0xff00) >> 8);
        bytes[1] = (byte) (data & 0xff);
        bytes[0] = (byte) ((data & 0xff00) >> 8);
        return bytes;
    }
@@ -206,6 +206,17 @@
        short b = (short) 32768;
        b++;
        System.out.println(byte2HexStr(shortGetBytes((short) b)));
        String model = "123";
        byte[] messageBody = new byte[30];
        byte[] modelBytes = new byte[20];
        modelBytes =  model.getBytes();
        System.arraycopy(shortGetBytes((short)323),0,messageBody,0,2);
        System.arraycopy(modelBytes,0,messageBody,2,modelBytes.length);
        System.arraycopy(shortGetBytes((short)3),0,messageBody,22,2);
        System.out.println(byte2HexStr(messageBody));
    }
    public static byte[] subArray(byte[] srcBytes, int begin, int length) {