From c05a93ddb0714a310a31574aaf030e677d9a07b6 Mon Sep 17 00:00:00 2001
From: wxr <464027401@qq.com>
Date: 星期五, 06 一月 2023 17:43:31 +0800
Subject: [PATCH] 增加多网关绑定支持

---
 Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideSettingGateway.cs |   20 +++++++---
 Crabtree/SmartHome/UI/SimpleControl/CommonPage.cs                      |    5 ++
 Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideAddGateway.cs     |   72 ++++++++++++++++++++++++++++++++++-
 Crabtree/ON/Properties/AndroidManifest.xml                             |    2 
 Crabtree/SmartHome/HDL/Operation/Packet.cs                             |    7 ++-
 5 files changed, 94 insertions(+), 12 deletions(-)

diff --git a/Crabtree/ON/Properties/AndroidManifest.xml b/Crabtree/ON/Properties/AndroidManifest.xml
index 0091fc5..3455605 100644
--- a/Crabtree/ON/Properties/AndroidManifest.xml
+++ b/Crabtree/ON/Properties/AndroidManifest.xml
@@ -1,5 +1,5 @@
 锘�<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.hdl.crabtreenew" android:versionName="2.712301" android:versionCode="202212301">
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.hdl.crabtreenew" android:versionName="2.801062" android:versionCode="202301062">
 	<uses-sdk android:minSdkVersion="23" android:targetSdkVersion="30" />
 	<!-- 鍦ㄥ畨鍗揚鐗堟湰涔嬪悗锛屽繀椤昏鎺堜簣FOREGROUND_SERVICE鏉冮檺锛屾墠鑳藉浣跨敤鍓嶅彴鏈嶅姟 -->
 	<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
diff --git a/Crabtree/SmartHome/HDL/Operation/Packet.cs b/Crabtree/SmartHome/HDL/Operation/Packet.cs
index 0779834..11641ee 100644
--- a/Crabtree/SmartHome/HDL/Operation/Packet.cs
+++ b/Crabtree/SmartHome/HDL/Operation/Packet.cs
@@ -2,6 +2,7 @@
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
+using Shared.SimpleControl;
 
 namespace Shared
 {
@@ -57,8 +58,10 @@
 		/// </summary>
 		public virtual void Manager ()
 		{
-            //鍔犲瘑妫�娴�
-            EncryptionDetection ();
+            if (CommonPage.needEncryptionDetection) {
+                //鍔犲瘑妫�娴�
+                EncryptionDetection ();
+            }
 
             //var mes2 = System.Text.Encoding.ASCII.GetString (Bytes, 0, Bytes.Length);
             //Utlis.WriteLine ($"============>GetBytes 锛歿mes2}");
diff --git a/Crabtree/SmartHome/UI/SimpleControl/CommonPage.cs b/Crabtree/SmartHome/UI/SimpleControl/CommonPage.cs
index e354ea1..ab1bd19 100644
--- a/Crabtree/SmartHome/UI/SimpleControl/CommonPage.cs
+++ b/Crabtree/SmartHome/UI/SimpleControl/CommonPage.cs
@@ -28,6 +28,11 @@
         public static bool LocalPhoneFindDevice = false;
         public static int searchTotal = 0;
         private static string ip="0.0.0.0";
+        /// <summary>
+        /// 鏄惁闇�瑕佸姞瀵嗘娴嬨�併�佷负浜嗛�傞厤澶氱綉鍏筹紝鎼滅储娣诲姞缃戝叧鐨勬椂鍊欓渶瑕佸叧鎺夊姞瀵嗘娴嬶紝鐒跺悗鍚屾椂鍙戦�佸瘑鏂囷紝鏄庢枃鎼滅储缃戝叧 2023-01-06 16:49:30
+        /// </summary>
+        public static bool needEncryptionDetection = true;
+
         public static System.Net.IPEndPoint EndPoint {
             get {
                 try {
diff --git a/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideAddGateway.cs b/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideAddGateway.cs
index 324060e..ada09d8 100644
--- a/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideAddGateway.cs
+++ b/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideAddGateway.cs
@@ -17,6 +17,21 @@
         {
             BackgroundColor = SkinStyle.Current.MainColor;
             inThisView = true;
+
+
+            //var secretKeyPack = HttpServerRequest.Current.ApplyDeviceSecret ("3782DACE9D900428");
+            //if (secretKeyPack != null) {
+            //    if (secretKeyPack.Code == StateCode.SUCCESS) {
+            //        var pack = Newtonsoft.Json.JsonConvert.DeserializeObject<DeviceSecret> (secretKeyPack.Data.ToString ());
+            //        if (pack != null) {
+            //            byte [] usefullBytes = new byte [17];
+            //            usefullBytes [0] = 1;
+            //            byte [] ddd = System.Text.Encoding.ASCII.GetBytes (pack.deviceSecret);
+            //            Array.Copy (ddd, 0, usefullBytes, 1, 16 < ddd.Length ? 16 : ddd.Length);
+            //        }
+            //    }
+            //}
+
         }
 
         public override void RemoveFromParent ()
@@ -427,6 +442,8 @@
                         MainPage.Loading.Start ("Searching for gateway...");
                     });
                     #region 鎼滅储璁惧
+                    //鏄惁闇�瑕佸姞瀵嗘娴嬨�併�佷负浜嗛�傞厤澶氱綉鍏筹紝鎼滅储娣诲姞缃戝叧鐨勬椂鍊欓渶瑕佸叧鎺夊姞瀵嗘娴嬶紝鐒跺悗鍚屾椂鍙戦�佸瘑鏂囷紝鏄庢枃鎼滅储缃戝叧 2023-01-06 16:49:30
+                    CommonPage.needEncryptionDetection = false;
                     ////2020-01-14 榛樿鏄庢枃寮�濮嬫悳绱�
                     UserConfig.Instance.IsLocalEncrypt = false;
                     UserConfig.Instance.EncryptedPasswordCorrect = true;
@@ -482,8 +499,57 @@
                             readCount = 3;
                         }
                     }
-                    CommonPage.FindGateway = false;
 
+                    //2023-01-06 16:33:09 澧炲姞鍚屾椂鍙戦�佸瘑鏂囨悳绱�
+                    CommonPage.needEncryptionDetection = true;
+                    UserConfig.Instance.IsLocalEncrypt = true;
+                    readCount = 3;
+                    while (0 < readCount) {
+                        readCount--;
+                        System.IO.MemoryStream ms = new System.IO.MemoryStream ();
+                        ms.WriteByte (CommonPage.RandomHigh);
+                        ms.WriteByte (CommonPage.RandomLow);
+
+                        List<Common> list = CommonPage.GateWayList;
+
+                        int tempCount = list.Count;
+                        string s = ";";
+                        for (int i = 0; i < list.Count; i++) {
+                            Common common = list [i];
+                            if (s.Contains (";" + common.SubnetID.ToString () + ":" + common.DeviceID.ToString ()))
+                                continue;
+                            s += common.SubnetID.ToString () + ":" + common.DeviceID.ToString () + ";";
+                            ms.WriteByte (common.SubnetID);
+                            ms.WriteByte (common.DeviceID);
+                        }
+                        Control control = new Control ();
+
+                        Utlis.WriteLine ("缁勬挱鎼滅储缃戝叧锛屾悳绱㈠湴鍧�鏄�:" + CommonPage.EndPoint.ToString () + "    " + CommonPage.GateWayList.Count);
+                        control.Send (new Target () {
+                            IPEndPoint = CommonPage.EndPoint,
+                            Command = Command.ReadGateway,
+                            SubnetID = 0xFF,
+                            DeviceID = 0xFF,
+                            AddData = ms.ToArray ()
+                        }, SendCount.Zero, false);
+
+                        Utlis.WriteLine ("骞挎挱鎼滅储缃戝叧锛屾悳绱㈠湴鍧�鏄�:" + new Net.NetWiFi ().BroadcastIpAddress.ToString () + "    " + CommonPage.GateWayList.Count);
+                        control.Send (new Target () {
+                            IPEndPoint = new System.Net.IPEndPoint (new Net.NetWiFi ().BroadcastIpAddress, 6000),
+                            Command = Command.ReadGateway,
+                            SubnetID = 0xFF,
+                            DeviceID = 0xFF,
+                            AddData = ms.ToArray ()
+                        }, SendCount.Zero, false);
+
+                        System.Threading.Thread.Sleep (800);
+                        //濡傛灉鏁伴噺涓嶇浉绛夛紝灏遍噸缃鏁�
+                        if (tempCount != CommonPage.GateWayList.Count) {
+                            readCount = 3;
+                        }
+                    }
+
+                    CommonPage.FindGateway = false;
                     CommonPage.LocalPhoneFindDevice = false;
                     #endregion
                 } catch (Exception ex) {
@@ -645,14 +711,14 @@
             //    //UserConfig.Instance.LocalEncryptKey = aseKeyStr;
             //    Utlis.WriteLine ($"============>LocalEncryptKey 鍔犲瘑鎴愬姛Key涓猴細{UserConfig.Instance.LocalEncryptKey}");
             //}
-
+            UserConfig.Instance.IsLocalEncrypt = false;
             var backBytes = Control.ControlBytesSendHasReturn (Command.Read_APP_Data_STORE_1D5C_CMD, common.SubnetID, common.DeviceID, new byte [] { });
           
             if (backBytes == null) {
                 Application.RunOnMainThread (() => {
                     new Alert ("", "No response from gateway. Please make sure the gateway is online and its firmware is up to date.", Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                 });
-               
+                return false;
             }
 
             if (backBytes.Length >= 37) {
diff --git a/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideSettingGateway.cs b/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideSettingGateway.cs
index 1fd7ee7..3d0bab8 100644
--- a/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideSettingGateway.cs
+++ b/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideSettingGateway.cs
@@ -980,20 +980,28 @@
                 var result = Control.ControlBytesSendHasReturn (Command.ApplyServerKey, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, new byte [] { 0});
                 if (result != null && result.Length > 1) {
                     if (result [1] == 0xF5) {
-                        var secretKeyPack = HttpServerRequest.Current.ApplyDeviceSecret (gatewayDeicve.MAC);
+                        var secretKeyPack = HttpServerRequest.Current.ApplyDeviceSecret (gatewayDeicve.MAC.Replace(".",""));
                         if (secretKeyPack != null) {
                             if (secretKeyPack.Code == StateCode.SUCCESS) {
                                 var pack = Newtonsoft.Json.JsonConvert.DeserializeObject<DeviceSecret> (secretKeyPack.Data.ToString ());
                                 if (pack != null) {
                                     byte [] usefullBytes = new byte [17];
                                     usefullBytes [0] = 1;
-                                    byte [] ddd = CommonPage.MyEncodingGB2312.GetBytes (pack.deviceSecret);
+                                    byte [] ddd = System.Text.Encoding.ASCII.GetBytes (pack.deviceSecret);
                                     Array.Copy (ddd, 0, usefullBytes, 1, 16 < ddd.Length ? 16 : ddd.Length);
                                     var result2 = Control.ControlBytesSendHasReturn (Command.ApplyServerKey, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, usefullBytes);
-                                    var result3 = Control.ControlBytesSendHasReturn (Command.RestartTheGateway, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, new byte [] { });
-                                    Application.RunOnMainThread (() => {
-                                        new Alert ("", "The Internet access key was successfully written, and the gateway is being restarted!", Language.StringByID (R.MyInternationalizationString.Close)).Show ();
-                                    });
+
+                                    //byte [] restartArray = new byte [12];
+                                    //string [] macArray = gatewayDeicve.MAC.Split (".");
+                                    //for(int i = 0; i < macArray.Length; i++) {
+                                    //    restartArray [i + 2] = Convert.ToByte (macArray [i], 16);
+                                    //}
+                                    //restartArray [10] = gatewayDeicve.SubnetID;
+                                    //restartArray [11] = gatewayDeicve.DeviceID;
+                                    //var result3 = Control.ControlBytesSendHasReturn (Command.RestartTheGateway, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, restartArray);
+                                    //Application.RunOnMainThread (() => {
+                                    //    new Alert ("", "The Internet access key was successfully written, and the gateway is being restarted!", Language.StringByID (R.MyInternationalizationString.Close)).Show ();
+                                    //});
                                 }
                             }
                         } else {

--
Gitblit v1.8.0