From 4e307b0d89c9a84916bbbc2119e41d34c6badc13 Mon Sep 17 00:00:00 2001
From: lizhanwei <Dana_Lee1016@126.com>
Date: 星期五, 14 二月 2020 16:39:49 +0800
Subject: [PATCH] 修改平台协议文档;调通注册消息;

---
 app/src/main/java/safeluck/drive/evaluation/im/IMSEventListener.java           |   10 +
 im_lib/src/main/java/com/anyun/im_lib/util/ByteUtil.java                       |   15 ++
 app/src/main/java/safeluck/drive/evaluation/im/IMessageProcessor.java          |    2 
 Documents/驾考模拟系统业务平台协议设计xc20200211.doc                                         |    0 
 app/src/main/java/safeluck/drive/evaluation/bean/RegisterMessage.java          |  113 ++++++++++++++++++++++
 im_lib/src/main/java/com/anyun/im_lib/MsgDispatcher.java                       |    2 
 app/src/main/java/safeluck/drive/evaluation/fragment/SignalConfigFragment.java |  111 +++++++++++++++++++--
 app/src/main/java/safeluck/drive/evaluation/util/Utils.java                    |    7 +
 im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java                |    2 
 im_lib/src/main/java/com/anyun/im_lib/netty/TCPReadHandler.java                |    4 
 app/src/main/java/safeluck/drive/evaluation/im/MessageProcessor.java           |   12 ++
 11 files changed, 251 insertions(+), 27 deletions(-)

diff --git "a/Documents/\351\251\276\350\200\203\346\250\241\346\213\237\347\263\273\347\273\237\344\270\232\345\212\241\345\271\263\345\217\260\345\215\217\350\256\256\350\256\276\350\256\241xc20200211.doc" "b/Documents/\351\251\276\350\200\203\346\250\241\346\213\237\347\263\273\347\273\237\344\270\232\345\212\241\345\271\263\345\217\260\345\215\217\350\256\256\350\256\276\350\256\241xc20200211.doc"
index ecc0695..08714bb 100644
--- "a/Documents/\351\251\276\350\200\203\346\250\241\346\213\237\347\263\273\347\273\237\344\270\232\345\212\241\345\271\263\345\217\260\345\215\217\350\256\256\350\256\276\350\256\241xc20200211.doc"
+++ "b/Documents/\351\251\276\350\200\203\346\250\241\346\213\237\347\263\273\347\273\237\344\270\232\345\212\241\345\271\263\345\217\260\345\215\217\350\256\256\350\256\276\350\256\241xc20200211.doc"
Binary files differ
diff --git a/app/src/main/java/safeluck/drive/evaluation/bean/RegisterMessage.java b/app/src/main/java/safeluck/drive/evaluation/bean/RegisterMessage.java
index 52ac0ce..dbfff02 100644
--- a/app/src/main/java/safeluck/drive/evaluation/bean/RegisterMessage.java
+++ b/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
+     * 缁堢鎵�鍦ㄥ湴鐪両D
+     * 2
+     * 甯傚幙鍩烮D
+     * WORD
+     * 缁堢鎵�鍦ㄥ湴甯侷D
+     * 4
+     * 缁堢鍨嬪彿
+     * BYTE[20]
+     * 20涓瓧鑺傦紝姝ょ粓绔瀷鍙风敱鍒堕�犲晢鑷瀹氫箟锛屼綅鏁颁笉瓒�20浣嶇殑锛屽悗琛モ��0X00鈥�
+     * 24
+     * 缁堢鍑哄巶搴忓垪鍙�
+     * BYTE[8]
+     * 8涓瓧鑺傦紝鐢卞ぇ鍐欏瓧姣嶅拰鏁板瓧缁勬垚锛屾缁堢ID鐢卞埗閫犲晢鑷瀹氫箟锛屼綅鏁颁笉瓒虫椂锛屽悗琛モ��0X00鈥�
+     * 32
+     * IMEI
+     * BYTE[15]
+     * 鍥介檯绉诲姩璁惧鏍囪瘑锛孉SCII鐮�
+     */
+    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;
     }
 }
diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/SignalConfigFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/SignalConfigFragment.java
index 7ff9ebc..98b53e5 100644
--- a/app/src/main/java/safeluck/drive/evaluation/fragment/SignalConfigFragment.java
+++ b/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 @@
         }
     }
 
+
+
 }
diff --git a/app/src/main/java/safeluck/drive/evaluation/im/IMSEventListener.java b/app/src/main/java/safeluck/drive/evaluation/im/IMSEventListener.java
index 18a7590..b2d6612 100644
--- a/app/src/main/java/safeluck/drive/evaluation/im/IMSEventListener.java
+++ b/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();
     }
 }
diff --git a/app/src/main/java/safeluck/drive/evaluation/im/IMessageProcessor.java b/app/src/main/java/safeluck/drive/evaluation/im/IMessageProcessor.java
index edc2c6c..006aece 100644
--- a/app/src/main/java/safeluck/drive/evaluation/im/IMessageProcessor.java
+++ b/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);
 }
diff --git a/app/src/main/java/safeluck/drive/evaluation/im/MessageProcessor.java b/app/src/main/java/safeluck/drive/evaluation/im/MessageProcessor.java
index 2b3e333..450aac7 100644
--- a/app/src/main/java/safeluck/drive/evaluation/im/MessageProcessor.java
+++ b/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: 娑堟伅姝g‘");
+        }
     }
 
     @Override
diff --git a/app/src/main/java/safeluck/drive/evaluation/util/Utils.java b/app/src/main/java/safeluck/drive/evaluation/util/Utils.java
index a0548a7..f6054f2 100644
--- a/app/src/main/java/safeluck/drive/evaluation/util/Utils.java
+++ b/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;
     }
 
     /**
diff --git a/im_lib/src/main/java/com/anyun/im_lib/MsgDispatcher.java b/im_lib/src/main/java/com/anyun/im_lib/MsgDispatcher.java
index 9fbc31e..cf0f2c4 100644
--- a/im_lib/src/main/java/com/anyun/im_lib/MsgDispatcher.java
+++ b/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);
diff --git a/im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java b/im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java
index 73332d6..70cd0f4 100644
--- a/im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java
+++ b/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");
diff --git a/im_lib/src/main/java/com/anyun/im_lib/netty/TCPReadHandler.java b/im_lib/src/main/java/com/anyun/im_lib/netty/TCPReadHandler.java
index ad3116d..97a2bbc 100644
--- a/im_lib/src/main/java/com/anyun/im_lib/netty/TCPReadHandler.java
+++ b/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
diff --git a/im_lib/src/main/java/com/anyun/im_lib/util/ByteUtil.java b/im_lib/src/main/java/com/anyun/im_lib/util/ByteUtil.java
index 6b0fb24..5761069 100644
--- a/im_lib/src/main/java/com/anyun/im_lib/util/ByteUtil.java
+++ b/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) {

--
Gitblit v1.8.0