JLChen
2020-02-28 9137222ece9b978eb97b5598f2eee6e070bcf9d6
Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideSettingGateway.cs
@@ -6,6 +6,7 @@
{
    public class GuideSettingGateway : FrameLayout
    {
        static byte TYPEStandardMQTT = 5;
        static byte TYPEHdlMQTT = 4;
        static GuideSettingGateway curView;
@@ -15,6 +16,7 @@
        static Loading myLoading;
        bool isReBind = false;
        static List<Common> addedCommon;
        static bool needRefresh;
        public GuideSettingGateway (GatewayBase gd)
        {
            gatewayDeicve = gd as GatewayBase;
@@ -34,6 +36,10 @@
                    myLoading.Hide ();
                    btnCloseLoading.RemoveFromParent ();
                    WirelessConfig (new byte [] { 1 });//close
                    if (needRefresh) {
                        needRefresh = false;
                        SearchDeviceList ();
                    }
                });
            };
@@ -127,7 +133,7 @@
            bottomView.AddChidren (btnAssignRoom);
            btnAssignRoom.MouseUpEventHandler += (sender, e) => {
                //bodyView.RemoveAll ();
                btnAssignRoomAction ();
            };
            SearchDeviceList ();
@@ -139,7 +145,7 @@
        void btnAssignRoomAction ()
        {
            if (gatewayDeicve.Type == DeviceType.OnePortMqttFR) {
                Console.WriteLine ("Assign OnePortMqttFR,HDL MQTT");
                //RemoteSetting ();
                RemoteSettingWithHDLMQTT ();
@@ -151,7 +157,7 @@
        }
        /// <summary>
        /// 开关无线配置
@@ -223,7 +229,7 @@
                            }
                            if (Control.ControlBytesSendHasReturn (Command.ReadDeviceLoopInfo, common.SubnetID, common.DeviceID, new byte [] { bigClass, minClass, (byte)k }) == null) {
                                j++;
                                //连续两次读取不到数据则跳出该循环
                                //连续两次读取不到数据则跳出该循环,代表设备离线2020-01-11
                                if (j == 2 && k == 2)
                                    break;
                            } else {
@@ -242,6 +248,8 @@
                            this.AddChidren (myLoading);
                            //myLoading.Start ("点击屏幕关闭配频模式");
                            myLoading.Start ("Searching, Please touch the here to exit the searching mode.");
                            //myLoading.Start ("Waiting for new device, Please touch the here to exit the waiting mode.");
                            this.AddChidren (btnCloseLoading);
                        }
                    });
@@ -478,23 +486,24 @@
                    //}
                    if (config) {
                        System.Threading.Tasks.Task.Factory.StartNew (() => {
                            try {
                                byte bigClass = common.BigClass;
                                byte minClass = common.MinClass;
                                int count = common.LoopCount;
                                for (int k = 1, j = 0; k <= count; k++) {
                                    if (Control.ControlBytesSendHasReturn (Command.ReadDeviceLoopInfo, common.SubnetID, common.DeviceID, new byte [] { bigClass, minClass, (byte)k }) == null) {
                                        j++;
                                        //连续两次读取不到数据则跳出该循环
                                        if (j == 2 && k == 2)
                                            break;
                                    }
                                }
                            } catch (Exception ex) {
                                Console.WriteLine ("Cinfig Read Device Loop Info " + ex.Message);
                            }
                        });
                        needRefresh = true;
                        //System.Threading.Tasks.Task.Factory.StartNew (() => {
                        //    try {
                        //        byte bigClass = common.BigClass;
                        //        byte minClass = common.MinClass;
                        //        int count = common.LoopCount;
                        //        for (int k = 1, j = 0; k <= count; k++) {
                        //            if (Control.ControlBytesSendHasReturn (Command.ReadDeviceLoopInfo, common.SubnetID, common.DeviceID, new byte [] { bigClass, minClass, (byte)k }) == null) {
                        //                j++;
                        //                //连续两次读取不到数据则跳出该循环
                        //                if (j == 2 && k == 2)
                        //                    break;
                        //            }
                        //        }
                        //    } catch (Exception ex) {
                        //        Console.WriteLine ("Cinfig Read Device Loop Info " + ex.Message);
                        //    }
                        //});
                    }
                    #endregion
@@ -520,6 +529,11 @@
            }) { IsBackground = true }.Start ();
        }
        ///// <summary>
        ///// 2020-02-11
        ///// 搜索重复次数 由4次增加为6次
        ///// </summary>
        //static readonly int READ_COUNT = 6;
        /// <summary>
        /// 读取设备
        /// </summary>
@@ -533,7 +547,8 @@
            CommonPage.DeviceList.Clear ();
            CommonPage.searchTotal = 0;
            //如果两次都没有数据反馈,就不读取
            int readCount = 4;
            //2020 - 02 - 11搜索重复次数 由4次增加为6次
            int readCount = 6;
            while (0 < readCount) {
                readCount--;
                var ms = new System.IO.MemoryStream ();
@@ -568,7 +583,7 @@
                System.Threading.Thread.Sleep (1000);
                //如果数量不相等,就重置次数
                if (tempCount != CommonPage.DeviceList.Count) {
                    readCount = 4;
                    readCount = 6;
                }
            }
            CommonPage.DeviceList = CommonPage.DeviceList.FindAll ((obj) => { return obj != null && obj.SubnetID == gatewayDeicve.SubnetID; });
@@ -604,7 +619,7 @@
                    //var currentRegionIdBytes = Utlis.IntToByteArray (UserConfig.Instance.CurrentRegion.RegionID);
                    byte [] RegionIDBytes = CommonPage.MyEncodingGB2312.GetBytes (UserConfig.Instance.CurrentRegion.RegionID.ToString());
                    byte [] RegionIDBytes = CommonPage.MyEncodingGB2312.GetBytes (UserConfig.Instance.CurrentRegion.Id.ToString ());
                    var currentRegionIdBytes = new byte [4];
                    Array.Copy (RegionIDBytes, 0, currentRegionIdBytes, 0, 4 < RegionIDBytes.Length ? 4 : RegionIDBytes.Length);
@@ -614,7 +629,7 @@
                    gatewayDeicve.Remote_GroupName = MainPage.LoginUser.AccountString;//UserConfig.Instance.CurrentRegion.RegionName;
                    gatewayDeicve.Remote_ProjectName = gatewayDeicve.MAC.Replace (".", "");//UserConfig.Instance.CurrentRegion.RegionName;
                    gatewayDeicve.Remote_UserName = "Admin";
                    gatewayDeicve.Remote_Password = "c" + MainPage.LoginUser.MasterID;
                    gatewayDeicve.Remote_Password = "c" + MainPage.LoginUser.ID;
                    byte [] ggn = new byte [20];
                    byte [] b1 = CommonPage.MyEncodingGB2312.GetBytes (gatewayDeicve.Remote_GroupName);
                    gatewayDeicve.Remote_GroupName = CommonPage.MyEncodingGB2312.GetString (b1);
@@ -665,7 +680,7 @@
                    var mobytes = Control.ControlBytesSendHasReturn (Command.SetGateWayModelInternetInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, serverIPBytes);
                    if (mobytes == null) {
                        Application.RunOnMainThread (() => {
                            new Alert ("", Language.StringByID (R.MyInternationalizationString.TipEquipmentNotOnline),
                            new Alert ("", ErrorCode.GatewayNoResponse,
                                       Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                        });
                    } else if (mobytes [0] == 0xF5) {
@@ -678,7 +693,7 @@
                            var bindReginIdStatus = Control.ControlBytesSendHasReturn (Command.Write_APP_Data_STORE_1D5E_CMD, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, currentRegionIdBytes);
                            if (bindReginIdStatus == null) {
                                Application.RunOnMainThread (() => {
                                    new Alert ("", Language.StringByID (R.MyInternationalizationString.TipEquipmentNotOnline), Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                                    new Alert ("", ErrorCode.GatewayNoResponse, Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                                });
                                return;
                            } else if (bindReginIdStatus [0] != 0xF8) {
@@ -689,45 +704,7 @@
                                return;
                            }
                        }
                        Application.RunOnMainThread (() => {
                            MainPage.Loading.Start ("Gateway setting succeeded,data up.Please wait...");
                        });
                        IO.FileUtils.SaveEquipmentMessage (gatewayDeicve);
                        var gatewayMAC = gatewayDeicve.MAC.Replace (".", "");
                        var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (new EditMACByHomeId { RegionID = UserConfig.Instance.CurrentRegion.RegionID, MAC = gatewayMAC, IsReBind = true });
                        var respone = MainPage.RequestHttps ("EditMACByHomeId", requestJson);
                        if (respone.StateCode != "SUCCESS") {
                            Application.RunOnMainThread (() => {
                                new Alert ("", "Communication abnormality,gateway failed to bind residence!", Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                                if (MainPage.LoginUser.AccountString == "464027401@qq.com") {
                                    new Alert (respone.StateCode, respone.ErrorInfo, Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                                }
                            });
                            return;
                        }
                        var gatewayListObj = new GatewayListObj ();
                        var gatewayListJson = Newtonsoft.Json.JsonConvert.SerializeObject (gatewayListObj);
                        var gatewayListRevertObj = MainPage.RequestHttps ("GatewayList", gatewayListJson);
                        if (gatewayListRevertObj.StateCode == "SUCCESS") {
                            var responseGatewayDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<List<GatewayRes>> (gatewayListRevertObj.ResponseData.ToString ());
                            if (responseGatewayDataObj.Count > 0) {
                                UserConfig.Instance.GatewayList.Clear ();
                                UserConfig.Instance.GatewayList.AddRange (responseGatewayDataObj);
                                UserConfig.Instance.GatewayMAC = gatewayDeicve.MAC;
                                UserConfig.Instance.SaveUserConfig ();
                                MainPage.LoginUser.LastTime = DateTime.Now;
                                Application.RunOnMainThread (() => {
                                    UserMiddle.Init (true);
                                });
                            } else {
                                Application.RunOnMainThread (() => {
                                    new Alert ("", "Communication abnormality,gateway failed to bind residence.Please try again.", Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                                    if (MainPage.LoginUser.AccountString == "464027401@qq.com") {
                                        new Alert ("22:" + respone.StateCode, respone.ErrorInfo, Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                                    }
                                });
                            }
                        }
                        BindGatewaysNew ();
                    }
                } catch (Exception ex) {
                    Console.WriteLine (ex.Message);
@@ -744,6 +721,8 @@
            });
            //Room.InitAllRoom ();
        }
        /// <summary>
        /// 远程配置 HDL MQTT模式
@@ -753,64 +732,32 @@
            byte [] gatewayBytes = null;
            string [] strServerIP = (MainPage.SeviceIP).Split ('.');
            string [] strServerIP1 = (MainPage.SeviceIP).Split ('.');
            MainPage.Loading.Start ("Configuring device...");
            MainPage.Loading.Start ("Configuring gateway...");
            System.Threading.Tasks.Task.Run (() => {
                try {
                    //读取一端口交换机、无线网关的配置信息
                    gatewayBytes = Control.ControlBytesSendHasReturn (Command.ReadGateWayModelInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, new byte [] { });
                    gatewayDeicve.Remote_GroupName = MainPage.LoginUser.AccountString;//UserConfig.Instance.CurrentRegion.RegionName;
                    gatewayDeicve.Remote_ProjectName = gatewayDeicve.MAC.Replace (".", "");//UserConfig.Instance.CurrentRegion.RegionName;
                    gatewayDeicve.Remote_UserName = "Admin";
                    gatewayDeicve.Remote_Password = "c" + MainPage.LoginUser.MasterID;
                    //gatewayDeicve.Remote_Password = "85521566";
                    byte [] ggn = new byte [20];
                    byte [] b1 = CommonPage.MyEncodingGB2312.GetBytes (gatewayDeicve.Remote_GroupName);
                    gatewayDeicve.Remote_GroupName = CommonPage.MyEncodingGB2312.GetString (b1);
                    Array.Copy (b1, 0, ggn, 0, 20 < b1.Length ? 20 : b1.Length);
                    byte [] gpn = new byte [20];
                    byte [] b2 = CommonPage.MyEncodingGB2312.GetBytes (gatewayDeicve.Remote_ProjectName);
                    Array.Copy (b2, 0, gpn, 0, 20 < b2.Length ? 20 : b2.Length);
                    byte [] gun = new byte [8];
                    byte [] b3 = CommonPage.MyEncodingGB2312.GetBytes (gatewayDeicve.Remote_UserName);
                    Array.Copy (b3, 0, gun, 0, 8 < b3.Length ? 8 : b3.Length);
                    byte [] gpw = new byte [8];
                    byte [] b4 = CommonPage.MyEncodingGB2312.GetBytes (gatewayDeicve.Remote_Password);
                    Array.Copy (b4, 0, gpw, 0, 8 < b4.Length ? 8 : b4.Length);
                    gatewayBytes [0] = TYPEHdlMQTT;//HDL MQTT
                    Array.Copy (ggn, 0, gatewayBytes, 1, 20);
                    Array.Copy (gpn, 0, gatewayBytes, 21, 20);
                    Array.Copy (gun, 0, gatewayBytes, 41, 8);
                    Array.Copy (gpw, 0, gatewayBytes, 49, 8);
                    //1.修改用户名信息
                    Control.ControlBytesSend (Command.SetGateWayModelInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, gatewayBytes);
                    ////2.读取一次管理信息
                    //byte [] adminBytes = Control.ControlBytesSendHasReturn (Command.ReadGateWayAdminInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, new byte [] { });
                    ////3.修改管理信息
                    //if (SetGateWayAdminInfo (adminBytes)) {
                    //    //4.写配置成功后下一步操作
                    //    GatewaySettingSucceeded ();
                    ////读取一端口交换机、无线网关的配置信息
                    //gatewayBytes = Control.ControlBytesSendHasReturn (Command.ReadGateWayModelInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, new byte [] { });
                    //if (gatewayBytes == null) {
                    //    //读取一端口交换机、无线网关的配置信息失败
                    //    new Alert ("", "Read gateway configuration failed!", "Close").Show ();
                    //    return;
                    //}
                    //2.修改管理信息
                    if (SetGateWayAdminInfo ()) {
                        //3.写配置成功后下一步操作
                        GatewaySettingSucceeded ();
                    //1.修改用户名信息 和修改连接模式
                    if (SetGateWayModelInfo()) {
                        //2.修改管理信息
                        if (SetGateWayAdminInfo ()) {
                            //3.写配置成功后下一步操作
                            GatewaySettingSucceeded ();
                        }
                    }
                } catch (Exception ex) {
                    Console.WriteLine (ex.Message);
                    Application.RunOnMainThread (() => {
                        new Alert ("", Language.StringByID (R.MyInternationalizationString.OperationFailed), Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                        //修改网关连接模式失败
                        new Alert ("", "Failed to modify gateway connection mode!", Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                    });
                    bool canRemove = false;
                } finally {
@@ -823,20 +770,54 @@
            //Room.InitAllRoom ();
        }
        bool SetGateWayModelInfo () {
            byte [] gatewayBytes = new byte [60];
            gatewayDeicve.Remote_GroupName = MainPage.LoginUser.AccountString;//UserConfig.Instance.CurrentRegion.RegionName;
            gatewayDeicve.Remote_ProjectName = gatewayDeicve.MAC.Replace (".", "");//UserConfig.Instance.CurrentRegion.RegionName;
            gatewayDeicve.Remote_UserName = "Admin";
            gatewayDeicve.Remote_Password = "c" + MainPage.LoginUser.ID;
            //gatewayDeicve.Remote_Password = "85521566";
            byte [] ggn = new byte [20];
            byte [] b1 = CommonPage.MyEncodingGB2312.GetBytes (gatewayDeicve.Remote_GroupName);
            gatewayDeicve.Remote_GroupName = CommonPage.MyEncodingGB2312.GetString (b1);
            Array.Copy (b1, 0, ggn, 0, 20 < b1.Length ? 20 : b1.Length);
            byte [] gpn = new byte [20];
            byte [] b2 = CommonPage.MyEncodingGB2312.GetBytes (gatewayDeicve.Remote_ProjectName);
            Array.Copy (b2, 0, gpn, 0, 20 < b2.Length ? 20 : b2.Length);
            byte [] gun = new byte [8];
            byte [] b3 = CommonPage.MyEncodingGB2312.GetBytes (gatewayDeicve.Remote_UserName);
            Array.Copy (b3, 0, gun, 0, 8 < b3.Length ? 8 : b3.Length);
            byte [] gpw = new byte [8];
            byte [] b4 = CommonPage.MyEncodingGB2312.GetBytes (gatewayDeicve.Remote_Password);
            Array.Copy (b4, 0, gpw, 0, 8 < b4.Length ? 8 : b4.Length);
            gatewayBytes [0] = TYPEHdlMQTT;//HDL MQTT
            Array.Copy (ggn, 0, gatewayBytes, 1, 20);
            Array.Copy (gpn, 0, gatewayBytes, 21, 20);
            Array.Copy (gun, 0, gatewayBytes, 41, 8);
            Array.Copy (gpw, 0, gatewayBytes, 49, 8);
            byte [] backBytes = Control.ControlBytesSendHasReturn (Command.SetGateWayModelInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, gatewayBytes);
            return CheckIsSuccessfulWithBytes (backBytes, "Failed to modify gateway connection mode.");
        }
        /// <summary>
        /// 修改管理员信息
        /// </summary>
        /// <param name="adminBytes"></param>
        /// <returns></returns>
        bool SetGateWayAdminInfo (byte[] adminBytes) {
        bool SetGateWayAdminInfo (byte [] adminBytes) {
            byte [] name = CommonPage.MyEncodingGB2312.GetBytes (MainPage.LoginUser.AccountString);
            byte [] backBytes;
            if (adminBytes != null && adminBytes.Length >= 73) {//返回数据正常,只修改账号信息
                Array.Copy (name, 0, adminBytes, 0, 36 < name.Length ? 36 : name.Length);
                backBytes = Control.ControlBytesSendHasReturn (Command.SetGateWayAdminInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, adminBytes);
            } else {
                byte [] currentRegionIdBytes = CommonPage.MyEncodingGB2312.GetBytes (UserConfig.Instance.CurrentRegion.RegionID.ToString());
                byte [] currentRegionIdBytes = CommonPage.MyEncodingGB2312.GetBytes (UserConfig.Instance.CurrentRegion.Id.ToString ());
                //byte [] currentRegionIdBytes = CommonPage.MyEncodingGB2312.GetBytes (UserConfig.Instance.CurrentRegion.RegionID);
                //var currentRegionIdBytes = Utlis.IntToByteArray (UserConfig.Instance.CurrentRegion.RegionID);
                adminBytes = new byte [73];
@@ -844,7 +825,7 @@
                Array.Copy (name, 0, adminBytes, 0, 36 < name.Length ? 36 : name.Length);
                Array.Copy (currentRegionIdBytes, 0, adminBytes, 37, 36 < currentRegionIdBytes.Length ? 36 : currentRegionIdBytes.Length);
                backBytes = Control.ControlBytesSendHasReturn (Command.SetGateWayAdminInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, adminBytes);
            }
            return CheckIsSuccessfulWithBytes (backBytes);
        }
@@ -858,7 +839,7 @@
        {
            byte [] name = CommonPage.MyEncodingGB2312.GetBytes (MainPage.LoginUser.AccountString);
            //byte [] currentRegionIdBytes = CommonPage.MyEncodingGB2312.GetBytes (UserConfig.Instance.CurrentRegion.RegionID);
            byte [] currentRegionIdBytes = CommonPage.MyEncodingGB2312.GetBytes (UserConfig.Instance.CurrentRegion.RegionID.ToString());
            byte [] currentRegionIdBytes = CommonPage.MyEncodingGB2312.GetBytes (UserConfig.Instance.CurrentRegion.Id.ToString ());
            //var currentRegionIdBytes = Utlis.IntToByteArray (UserConfig.Instance.CurrentRegion.RegionID);
            byte [] adminBytes = new byte [73];
            adminBytes [36] = 1;//住宅标志位
@@ -867,64 +848,7 @@
            byte [] backBytes = Control.ControlBytesSendHasReturn (Command.SetGateWayAdminInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, adminBytes);
            return CheckIsSuccessfulWithBytes (backBytes);
        }
        /// <summary>
        /// 远程配置 Standard MQTT模式
        /// </summary>
        void RemoteSettingWithStandardMQTT ()
        {
            byte [] gatewayBytes = null;
            string [] strServerIP = (MainPage.SeviceIP).Split ('.');
            string [] strServerIP1 = (MainPage.SeviceIP).Split ('.');
            MainPage.Loading.Start ("Configuring device...");
            System.Threading.Tasks.Task.Run (() => {
                try {
                    //读取一端口交换机、无线网关的配置信息
                    gatewayBytes = Control.ControlBytesSendHasReturn (Command.ReadGateWayModelInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, new byte [] { });
                    //连接类型配置为5 Standard MQTT模式
                    gatewayBytes [0] = TYPEStandardMQTT;//Standard MQTT
                    Control.ControlBytesSend (Command.SetGateWayModelInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, gatewayBytes);
                    //1.修改URL
                    //2.修改读取客户端ID,用户名,密码
                    //3.修改AES加密
                    //4.修改主题
                    //1.修改URL
                    if (SetGateWayURL ("https://developer.hdlcontrol.com/api/")) {
                        //2.修改客户端ID,用户名,密码
                        if (SetGateWayClientIDUsernamePassword ("85521566", "Admin", "85521566")) {
                            //3.修改AES加密
                            if (SetGateWayAESEncryption (true, "85521566")) {
                                //4.1修改订阅主题
                                if (SetGateWayTopic ("SubscribeTopic")) {
                                    //4.2修改发布主题
                                    if (SetGateWayTopic ("PublishTopic", true)) {
                                        //5.写配置成功后下一步操作
                                        GatewaySettingSucceeded ();
                                    }
                                }
                            }
                        }
                    }
                } catch (Exception ex) {
                    Console.WriteLine (ex.Message);
                    Application.RunOnMainThread (() => {
                        new Alert ("", Language.StringByID (R.MyInternationalizationString.OperationFailed), Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                    });
                    bool canRemove = false;
                } finally {
                    Application.RunOnMainThread (() => {
                        MainPage.Loading.Hide ();
                        //this.RemoveAll ();
                    });
                }
            });
            //Room.InitAllRoom ();
            return CheckIsSuccessfulWithBytes (backBytes, "Failed to modify gateway administrator information!");
        }
        /// <summary>
@@ -932,11 +856,11 @@
        /// </summary>
        /// <param name="backBytes"></param>
        /// <returns></returns>
        private bool CheckIsSuccessfulWithBytes (byte [] backBytes)
        private bool CheckIsSuccessfulWithBytes (byte [] backBytes, string errorStr = "Modify gateway configuration failed!")
        {
            if (backBytes == null) {
                Application.RunOnMainThread (() => {
                    new Alert ("", Language.StringByID (R.MyInternationalizationString.TipEquipmentNotOnline),
                    new Alert ("", ErrorCode.GatewayNoResponse,
                               Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                });
                return false;
@@ -944,87 +868,11 @@
                return true;
            } else {
                Application.RunOnMainThread (() => {
                    new Alert ("", Language.StringByID (R.MyInternationalizationString.OperationFailed),
                    new Alert ("", errorStr,
                               Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                });
                return false;
            }
        }
        /// <summary>
        /// 修改URL
        /// </summary>
        /// <returns></returns>
        bool SetGateWayURL (string urlStr = "", int pointID = 1883)
        {
            byte [] sendBytes = new byte [63];
            byte [] url = CommonPage.MyEncodingGB2312.GetBytes (urlStr);
            Array.Copy (url, 0, sendBytes, 1, 60 < url.Length ? 60 : url.Length);
            sendBytes [0] = GuideSettingGateway.TYPEStandardMQTT;
            sendBytes [61] = Convert.ToByte (pointID / 256);
            sendBytes [62] = Convert.ToByte (pointID % 256);
            var backBytes = Control.ControlBytesSendHasReturn (Command.SetGateWayURL, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, sendBytes);
            return CheckIsSuccessfulWithBytes (backBytes);
        }
        /// <summary>
        /// 修改客户端ID,用户名,密码
        /// </summary>
        /// <returns></returns>
        bool SetGateWayClientIDUsernamePassword (string clientIDStr = "", string usernameStr = "", string passwordStr = "")
        {
            byte [] userInfoBytes = new byte [64];
            byte [] clientID = CommonPage.MyEncodingGB2312.GetBytes (clientIDStr);
            Array.Copy (clientID, 0, userInfoBytes, 0, 32 < clientID.Length ? 32 : clientID.Length);
            byte [] username = CommonPage.MyEncodingGB2312.GetBytes (usernameStr);
            Array.Copy (username, 0, userInfoBytes, 32, 16 < username.Length ? 16 : username.Length);
            byte [] password = CommonPage.MyEncodingGB2312.GetBytes (passwordStr);
            Array.Copy (password, 0, userInfoBytes, 48, 16 < password.Length ? 16 : password.Length);
            var setUserInfoBytes = Control.ControlBytesSendHasReturn (Command.SetGateWayClientIDUsernamePassword, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, userInfoBytes);
            return CheckIsSuccessfulWithBytes (setUserInfoBytes);
        }
        /// <summary>
        /// 修改AES加密
        /// </summary>
        /// <returns></returns>
        bool SetGateWayAESEncryption (bool enable = false, string passwordStr = "")
        {
            byte [] sendBytes = new byte [17];
            sendBytes [0] = enable ? (byte)1 : (byte)0; //0:不使能  1 - 255:使能
            byte [] password = CommonPage.MyEncodingGB2312.GetBytes (passwordStr);
            Array.Copy (password, 0, sendBytes, 1, 16 < password.Length ? 16 : password.Length);
            var backBytes = Control.ControlBytesSendHasReturn (Command.SetGateWayAESEncryption, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, sendBytes);
            return CheckIsSuccessfulWithBytes (backBytes);
        }
        /// <summary>
        /// 修改主题
        /// </summary>
        /// <param name="bPublish">是否为发布主题</param>
        /// <param name="bDefault">是否默认</param>
        /// <returns></returns>
        bool SetGateWayTopic (string topicInfoStr = "", bool bPublish = false, bool bDefault = false)
        {
            byte [] sendBytes = new byte [50];
            sendBytes [0] = bPublish ? (byte)2 : (byte)1; //1:订阅  2:发布
            sendBytes [1] = bDefault ? (byte)0 : (byte)1; //1:非默认 0:默认
            byte [] topicInfo = CommonPage.MyEncodingGB2312.GetBytes (topicInfoStr);
            Array.Copy (topicInfo, 0, sendBytes, 2, 48 < topicInfo.Length ? 48 : topicInfo.Length);
            var backBytes = Control.ControlBytesSendHasReturn (Command.SetGateWayTopic, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, sendBytes);
            if (backBytes != null && backBytes.Length >= 2) {
                if (backBytes [0] == sendBytes [0] && backBytes [1] == sendBytes [1]) {
                    return true;
                }
            }
            return CheckIsSuccessfulWithBytes (backBytes);
        }
@@ -1037,15 +885,15 @@
            if (gatewayDeicve.Type == DeviceType.OnePortMqttFR) {
                //var currentRegionIdBytes = Utlis.IntToByteArray (UserConfig.Instance.CurrentRegion.RegionID);
                //byte [] currentRegionIdBytes = CommonPage.MyEncodingGB2312.GetBytes (UserConfig.Instance.CurrentRegion.RegionID);
                byte [] currentRegionIdBytes = CommonPage.MyEncodingGB2312.GetBytes (UserConfig.Instance.CurrentRegion.RegionID.ToString());
                byte [] sendBytes = new byte [32];
                Array.Copy (currentRegionIdBytes, 0, sendBytes, 2, 32 < currentRegionIdBytes.Length ? 32 : currentRegionIdBytes.Length);
                byte [] currentRegionIdBytes = CommonPage.MyEncodingGB2312.GetBytes (UserConfig.Instance.CurrentRegion.Id.ToString ());
                byte [] sendBytes = new byte [36];
                Array.Copy (currentRegionIdBytes, 0, sendBytes, 0, 36 < currentRegionIdBytes.Length ? 36 : currentRegionIdBytes.Length);
                //var currentRegionIdBytes = Utlis.IntToByteArray (UserConfig.Instance.CurrentRegion.RegionID);
                var bindReginIdStatus = Control.ControlBytesSendHasReturn (Command.Write_APP_Data_STORE_1D5E_CMD, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, sendBytes);
                if (bindReginIdStatus == null) {
                    Application.RunOnMainThread (() => {
                        new Alert ("", Language.StringByID (R.MyInternationalizationString.TipEquipmentNotOnline), Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                        new Alert ("", ErrorCode.GatewayNoResponse, Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                    });
                    return;
                } else if (bindReginIdStatus [0] != 0xF8) {
@@ -1057,46 +905,413 @@
                }
            }
            BindGatewaysNew ();
        }
        /// <summary>
        /// Gateway setting succeeded,data up.Please wait...
        /// 绑定Mac(印度版)
        /// </summary>
        void BindGatewaysNew ()
        {
            Application.RunOnMainThread (() => {
                MainPage.Loading.Start ("Gateway setting succeeded,data up.Please wait...");
                MainPage.Loading.Start ("Gateway setting succeeded,data up. Please wait...");
            });
            IO.FileUtils.SaveEquipmentMessage (gatewayDeicve);
            var gatewayMAC = gatewayDeicve.MAC.Replace (".", "");
            var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (new EditMACByHomeId { RegionID = UserConfig.Instance.CurrentRegion.RegionID, MAC = gatewayMAC, IsReBind = true });
            var respone = MainPage.RequestHttps ("EditMACByHomeId", requestJson);
            if (respone.StateCode != "SUCCESS") {
            //走新更新绑定接口
            var mBindMacObj = new BindMacObj () {
                LoginAccessToken = MainPage.LoginUser.LoginTokenString,
                HomeId = UserConfig.Instance.CurrentRegion.Id,
                MAC = gatewayMAC
            };
            string urlHead = MainPage.RequestHttpsHost;
            if (mBindMacObj.IsOtherAccountCtrl) {
                urlHead = UserConfig.Instance.MasterAccountRequestBaseUrl;
                mBindMacObj.LoginAccessToken = UserConfig.Instance.MasterAccountToken;
            }
            var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (mBindMacObj);
            //var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (new EditMACByHomeId { RegionID = UserConfig.Instance.CurrentRegion.Id, MAC = gatewayMAC, IsReBind = true });
            var respone = MainPage.RequestHttps (API.BindMac, requestJson, urlHead);
            if (respone.StateCode.ToUpper () != "SUCCESS") {
                GetNowHomeGatewayAfterBindMacFailed ();//2020-01-11
                Application.RunOnMainThread (() => {
                    new Alert ("", "Communication abnormality,gateway failed to bind residence!", Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                    new Alert ("", $"Failed to bind Mac address! {ErrorCode.Reason }{respone.StateCode}", Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                    if (MainPage.LoginUser.AccountString == "464027401@qq.com") {
                        new Alert (respone.StateCode, respone.ErrorInfo, Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                    }
                });
                return;
            }
            var gatewayListObj = new GatewayListObj ();
            var gatewayListJson = Newtonsoft.Json.JsonConvert.SerializeObject (gatewayListObj);
            var gatewayListRevertObj = MainPage.RequestHttps ("GatewayList", gatewayListJson);
            if (gatewayListRevertObj.StateCode == "SUCCESS") {
                var responseGatewayDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<List<GatewayRes>> (gatewayListRevertObj.ResponseData.ToString ());
                if (responseGatewayDataObj.Count > 0) {
                    UserConfig.Instance.GatewayList.Clear ();
                    UserConfig.Instance.GatewayList.AddRange (responseGatewayDataObj);
                    UserConfig.Instance.GatewayMAC = gatewayDeicve.MAC;
                    UserConfig.Instance.SaveUserConfig ();
                    MainPage.LoginUser.LastTime = DateTime.Now;
                    Application.RunOnMainThread (() => {
                        UserMiddle.Init (true);
                    });
                } else {
                    Application.RunOnMainThread (() => {
                        new Alert ("", "Communication abnormality,gateway failed to bind residence.Please try again.", Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                        if (MainPage.LoginUser.AccountString == "464027401@qq.com") {
                            new Alert ("22:" + respone.StateCode, respone.ErrorInfo, Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                        }
                    });
                }
            }
            //GetNowHomeGateway ();
            AddMacToUserConfig (gatewayMAC);
        }
        /// <summary>
        /// 修改切换本地住宅 网关
        /// </summary>
        void AddMacToUserConfig (string gatewayMAC)
        {
            UserConfig.Instance.GatewayMAC = gatewayMAC;
            UserConfig.Instance.SaveUserConfig ();
            MainPage.LoginUser.LastTime = DateTime.Now;
            Application.RunOnMainThread (() => {
                bodyView.RemoveAll ();
                //MainPage.WiFiStatus = "CrabtreeAdd/WiFi.png";
                UserMiddle.Init (true);
                MainPage.WiFiStatus = "CrabtreeAdd/WiFi.png";
                UserMiddle.btnLinkStatus.UnSelectedImagePath = MainPage.WiFiStatus;
            });
            //Utlis.ShowAppLinkStatus (AppLinkStatus.WiFi);
        }
        ///// <summary>
        ///// Gateway setting succeeded,data up.Please wait...
        ///// </summary>
        //void BindGateways ()
        //{
        //    Application.RunOnMainThread (() => {
        //        MainPage.Loading.Start ("Gateway setting succeeded,data up.Please wait...");
        //    });
        //    IO.FileUtils.SaveEquipmentMessage (gatewayDeicve);
        //    var gatewayMAC = gatewayDeicve.MAC.Replace (".", "");
        //    var oldMac = "";
        //    //2020-01-11
        //    if (UserConfig.Instance.CheckHomeGatewaysNotEmpty ()) {
        //        //当前住宅存在Mac 修改MAC接口
        //        oldMac = UserConfig.Instance.CurrentRegion.HomeGateways [0].GatewayUniqueId;
        //        if (oldMac == gatewayMAC) {//和绑定mac一致,不用修改
        //            AddMacToUserConfig (gatewayMAC);
        //            return;
        //        }
        //        var mUpdateMacObj = new UpdateMacObj () {
        //            LoginAccessToken = MainPage.LoginUser.LoginTokenString,
        //            HomeId = UserConfig.Instance.CurrentRegion.Id,
        //            NewMac = gatewayMAC,
        //            OldMac = oldMac
        //        };
        //        string urlHead = MainPage.RequestHttpsHost;
        //        if (mUpdateMacObj.IsOtherAccountCtrl) {
        //            urlHead = UserConfig.Instance.MasterAccountRequestBaseUrl;
        //            mUpdateMacObj.LoginAccessToken = UserConfig.Instance.MasterAccountToken;
        //        }
        //        var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (mUpdateMacObj);
        //        //var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (new EditMACByHomeId { RegionID = UserConfig.Instance.CurrentRegion.Id, MAC = gatewayMAC, IsReBind = true });
        //        var respone = MainPage.RequestHttps (API.UpdateMac, requestJson, urlHead);
        //        if (respone.StateCode.ToUpper () != "SUCCESS") {
        //            GetNowHomeGatewayAfterBindMacFailed ();//2020-01-11
        //            Application.RunOnMainThread (() => {
        //                new Alert ("", "Failed to update Mac address, gateway binding failed!", Language.StringByID (R.MyInternationalizationString.Close)).Show ();
        //                if (MainPage.LoginUser.AccountString == "464027401@qq.com") {
        //                    new Alert (respone.StateCode, respone.ErrorInfo, Language.StringByID (R.MyInternationalizationString.Close)).Show ();
        //                }
        //            });
        //            return;
        //        }
        //        //GetNowHomeGateway ();
        //        AddMacToUserConfig (gatewayMAC);
        //    } else {
        //        //走新绑定接口
        //        var mBindMacObj = new BindGatewayToHomeObj () {
        //            LoginAccessToken = MainPage.LoginUser.LoginTokenString,
        //            HomeId = UserConfig.Instance.CurrentRegion.Id,
        //        };
        //        mBindMacObj.BindGateways.Add (gatewayMAC);
        //        string urlHead = MainPage.RequestHttpsHost;
        //        if (mBindMacObj.IsOtherAccountCtrl) {
        //            urlHead = UserConfig.Instance.MasterAccountRequestBaseUrl;
        //            mBindMacObj.LoginAccessToken = UserConfig.Instance.MasterAccountToken;
        //        }
        //        var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (mBindMacObj);
        //        //var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (new EditMACByHomeId { RegionID = UserConfig.Instance.CurrentRegion.Id, MAC = gatewayMAC, IsReBind = true });
        //        var respone = MainPage.RequestHttps (API.BindGatewayToHome, requestJson, urlHead);
        //        if (respone.StateCode.ToUpper () != "SUCCESS" && respone.StateCode != "BindGatewaysExists") {
        //            GetNowHomeGatewayAfterBindMacFailed ();//2020-01-11
        //            Application.RunOnMainThread (() => {
        //                new Alert ("", "Failed to bind Mac address, gateway binding failed!", Language.StringByID (R.MyInternationalizationString.Close)).Show ();
        //                if (MainPage.LoginUser.AccountString == "464027401@qq.com") {
        //                    new Alert (respone.StateCode, respone.ErrorInfo, Language.StringByID (R.MyInternationalizationString.Close)).Show ();
        //                }
        //            });
        //            return;
        //        }
        //        //GetNowHomeGateway ();
        //        AddMacToUserConfig (gatewayMAC);
        //    }
        //}
        /// <summary>
        /// 绑定失败之后,查询刷新一次当前住宅 网关列表
        /// 2020-01-11
        /// </summary>
        void GetNowHomeGatewayAfterBindMacFailed ()
        {
            var requestObj3 = new GetSingleHomeGatewayPaggerObj ();
            requestObj3.ReqDto.LoginAccessToken = MainPage.LoginUser.LoginTokenString;
            requestObj3.ReqDto.HomeId = UserConfig.Instance.CurrentRegion.Id;
            requestObj3.ReqDto.PageSetting.Page = 1;
            requestObj3.ReqDto.PageSetting.PageSize = 10;
            string urlHead = MainPage.RequestHttpsHost;
            if (requestObj3.IsOtherAccountCtrl) {
                urlHead = UserConfig.Instance.MasterAccountRequestBaseUrl;
                requestObj3.ReqDto.LoginAccessToken = UserConfig.Instance.MasterAccountToken;
            }
            var requestJson3 = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj3);
            var revertObj3 = MainPage.RequestHttps (API.GetSingleHomeGatewayPagger, requestJson3, urlHead);
            if (revertObj3.StateCode.ToUpper () == "SUCCESS") {
                var infoResult = Newtonsoft.Json.JsonConvert.DeserializeObject<GetGatewayResult> (revertObj3.ResponseData.ToString ());
                //2020-01-11
                UserConfig.Instance.SetNowHomeGateways (infoResult.PageData);
            }
        }
        ///// <summary>
        ///// 查询当前住宅 网关列表
        ///// </summary>
        //void GetNowHomeGateway ()
        //{
        //    var requestObj3 = new GetSingleHomeGatewayPaggerObj ();
        //    requestObj3.ReqDto.LoginAccessToken = MainPage.LoginUser.LoginTokenString;
        //    requestObj3.ReqDto.HomeId = UserConfig.Instance.CurrentRegion.Id;
        //    requestObj3.ReqDto.PageSetting.Page = 1;
        //    requestObj3.ReqDto.PageSetting.PageSize = 999;
        //    string urlHead = MainPage.RequestHttpsHost;
        //    if (requestObj3.IsOtherAccountCtrl) {
        //        urlHead = UserConfig.Instance.MasterAccountRequestBaseUrl;
        //        requestObj3.ReqDto.LoginAccessToken = UserConfig.Instance.MasterAccountToken;
        //    }
        //    //var requestObj3 = new GatewayByRegionListObj () { RegionID = UserConfig.Instance.CurrentRegion.Id };
        //    var requestJson3 = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj3);
        //    var revertObj3 = MainPage.RequestHttps (API.GetSingleHomeGatewayPagger, requestJson3, urlHead);
        //    if (revertObj3.StateCode.ToUpper () == "SUCCESS") {
        //        var infoResult = Newtonsoft.Json.JsonConvert.DeserializeObject<GetGatewayResult> (revertObj3.ResponseData.ToString ());
        //        var responseGatewayDataObj = infoResult.PageData;
        //        if (responseGatewayDataObj != null && responseGatewayDataObj.Count > 0) {
        //            UserConfig.Instance.GatewayList.Clear ();
        //            UserConfig.Instance.GatewayList.AddRange (responseGatewayDataObj);
        //            UserConfig.Instance.GatewayMAC = gatewayDeicve.MAC;
        //            UserConfig.Instance.SaveUserConfig ();
        //            MainPage.LoginUser.LastTime = DateTime.Now;
        //            Application.RunOnMainThread (() => {
        //                bodyView.RemoveAll ();
        //                UserMiddle.Init (true);
        //            });
        //        } else {
        //            Application.RunOnMainThread (() => {
        //                new Alert ("", "Query gateway failed, gateway failed to bind residence.Please try again.", Language.StringByID (R.MyInternationalizationString.Close)).Show ();
        //                if (MainPage.LoginUser.AccountString == "464027401@qq.com") {
        //                    new Alert ("22:" + revertObj3.StateCode, revertObj3.ErrorInfo, Language.StringByID (R.MyInternationalizationString.Close)).Show ();
        //                }
        //            });
        //        }
        //    } else {
        //        Application.RunOnMainThread (() => {
        //            new Alert ("", "Query gateway failed, gateway failed to bind residence.Please try again.", Language.StringByID (R.MyInternationalizationString.Close)).Show ();
        //            if (MainPage.LoginUser.AccountString == "464027401@qq.com") {
        //                new Alert ("22:" + revertObj3.StateCode, revertObj3.ErrorInfo, Language.StringByID (R.MyInternationalizationString.Close)).Show ();
        //            }
        //        });
        //    }
        //}
        ///// <summary>
        /////
        ///// </summary>
        ///// <param name="stateCodeStr"></param>
        //void ShowGetAllBindGatewarysPaggerErrorInfo (string stateCodeStr)
        //{
        //    string mes = "";
        //    //2020-01-06 待补充
        //    if (stateCodeStr == ErrorCode.NetworkError) {
        //        mes = ErrorCode.NetworkError;
        //    } else {
        //        mes = ErrorCode.OperationFailed + ErrorCode.Reason + stateCodeStr;
        //    }
        //    if (!string.IsNullOrEmpty (mes)) {
        //        Application.RunOnMainThread (() => {
        //            new Alert ("", mes, Language.StringByID (R.MyInternationalizationString.Close)).Show ();
        //        });
        //    }
        //}
        //*****************StandardMQTT 配置方式 目前用不上*****************
        ///// <summary>
        ///// 远程配置 Standard MQTT模式
        ///// </summary>
        //void RemoteSettingWithStandardMQTT ()
        //{
        //    byte [] gatewayBytes = null;
        //    string [] strServerIP = (MainPage.SeviceIP).Split ('.');
        //    string [] strServerIP1 = (MainPage.SeviceIP).Split ('.');
        //    MainPage.Loading.Start ("Configuring device...");
        //    System.Threading.Tasks.Task.Run (() => {
        //        try {
        //            //读取一端口交换机、无线网关的配置信息
        //            gatewayBytes = Control.ControlBytesSendHasReturn (Command.ReadGateWayModelInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, new byte [] { });
        //            //连接类型配置为5 Standard MQTT模式
        //            gatewayBytes [0] = TYPEStandardMQTT;//Standard MQTT
        //            Control.ControlBytesSend (Command.SetGateWayModelInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, gatewayBytes);
        //            //1.修改URL
        //            //2.修改读取客户端ID,用户名,密码
        //            //3.修改AES加密
        //            //4.修改主题
        //            //1.修改URL
        //            if (SetGateWayURL ("https://developer.hdlcontrol.com/api/")) {
        //                //2.修改客户端ID,用户名,密码
        //                if (SetGateWayClientIDUsernamePassword ("85521566", "Admin", "85521566")) {
        //                    //3.修改AES加密
        //                    if (SetGateWayAESEncryption (true, "85521566")) {
        //                        //4.1修改订阅主题
        //                        if (SetGateWayTopic ("SubscribeTopic")) {
        //                            //4.2修改发布主题
        //                            if (SetGateWayTopic ("PublishTopic", true)) {
        //                                //5.写配置成功后下一步操作
        //                                GatewaySettingSucceeded ();
        //                            }
        //                        }
        //                    }
        //                }
        //            }
        //        } catch (Exception ex) {
        //            Console.WriteLine (ex.Message);
        //            Application.RunOnMainThread (() => {
        //                new Alert ("", Language.StringByID (R.MyInternationalizationString.OperationFailed), Language.StringByID (R.MyInternationalizationString.Close)).Show ();
        //            });
        //            bool canRemove = false;
        //        } finally {
        //            Application.RunOnMainThread (() => {
        //                MainPage.Loading.Hide ();
        //                //this.RemoveAll ();
        //            });
        //        }
        //    });
        //    //Room.InitAllRoom ();
        //}
        ///// <summary>
        ///// 修改URL
        ///// </summary>
        ///// <returns></returns>
        //bool SetGateWayURL (string urlStr = "", int pointID = 1883)
        //{
        //    byte [] sendBytes = new byte [63];
        //    byte [] url = CommonPage.MyEncodingGB2312.GetBytes (urlStr);
        //    Array.Copy (url, 0, sendBytes, 1, 60 < url.Length ? 60 : url.Length);
        //    sendBytes [0] = GuideSettingGateway.TYPEStandardMQTT;
        //    sendBytes [61] = Convert.ToByte (pointID / 256);
        //    sendBytes [62] = Convert.ToByte (pointID % 256);
        //    var backBytes = Control.ControlBytesSendHasReturn (Command.SetGateWayURL, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, sendBytes);
        //    return CheckIsSuccessfulWithBytes (backBytes);
        //}
        ///// <summary>
        ///// 修改客户端ID,用户名,密码
        ///// </summary>
        ///// <returns></returns>
        //bool SetGateWayClientIDUsernamePassword (string clientIDStr = "", string usernameStr = "", string passwordStr = "")
        //{
        //    byte [] userInfoBytes = new byte [64];
        //    byte [] clientID = CommonPage.MyEncodingGB2312.GetBytes (clientIDStr);
        //    Array.Copy (clientID, 0, userInfoBytes, 0, 32 < clientID.Length ? 32 : clientID.Length);
        //    byte [] username = CommonPage.MyEncodingGB2312.GetBytes (usernameStr);
        //    Array.Copy (username, 0, userInfoBytes, 32, 16 < username.Length ? 16 : username.Length);
        //    byte [] password = CommonPage.MyEncodingGB2312.GetBytes (passwordStr);
        //    Array.Copy (password, 0, userInfoBytes, 48, 16 < password.Length ? 16 : password.Length);
        //    var setUserInfoBytes = Control.ControlBytesSendHasReturn (Command.SetGateWayClientIDUsernamePassword, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, userInfoBytes);
        //    return CheckIsSuccessfulWithBytes (setUserInfoBytes);
        //}
        ///// <summary>
        ///// 修改AES加密
        ///// </summary>
        ///// <returns></returns>
        //bool SetGateWayAESEncryption (bool enable = false, string passwordStr = "")
        //{
        //    byte [] sendBytes = new byte [17];
        //    sendBytes [0] = enable ? (byte)1 : (byte)0; //0:不使能  1 - 255:使能
        //    byte [] password = CommonPage.MyEncodingGB2312.GetBytes (passwordStr);
        //    Array.Copy (password, 0, sendBytes, 1, 16 < password.Length ? 16 : password.Length);
        //    var backBytes = Control.ControlBytesSendHasReturn (Command.SetGateWayAESEncryption, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, sendBytes);
        //    return CheckIsSuccessfulWithBytes (backBytes);
        //}
        ///// <summary>
        ///// 修改主题
        ///// </summary>
        ///// <param name="bPublish">是否为发布主题</param>
        ///// <param name="bDefault">是否默认</param>
        ///// <returns></returns>
        //bool SetGateWayTopic (string topicInfoStr = "", bool bPublish = false, bool bDefault = false)
        //{
        //    byte [] sendBytes = new byte [50];
        //    sendBytes [0] = bPublish ? (byte)2 : (byte)1; //1:订阅  2:发布
        //    sendBytes [1] = bDefault ? (byte)0 : (byte)1; //1:非默认 0:默认
        //    byte [] topicInfo = CommonPage.MyEncodingGB2312.GetBytes (topicInfoStr);
        //    Array.Copy (topicInfo, 0, sendBytes, 2, 48 < topicInfo.Length ? 48 : topicInfo.Length);
        //    var backBytes = Control.ControlBytesSendHasReturn (Command.SetGateWayTopic, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, sendBytes);
        //    if (backBytes != null && backBytes.Length >= 2) {
        //        if (backBytes [0] == sendBytes [0] && backBytes [1] == sendBytes [1]) {
        //            return true;
        //        }
        //    }
        //    return CheckIsSuccessfulWithBytes (backBytes);
        //}
    }
}