JLChen
2020-02-20 965290476c027deb96891cde1095d9a100581a6b
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;
@@ -247,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);
                        }
                    });
@@ -526,6 +529,11 @@
            }) { IsBackground = true }.Start ();
        }
        ///// <summary>
        ///// 2020-02-11
        ///// 搜索重复次数 由4次增加为6次
        ///// </summary>
        //static readonly int READ_COUNT = 6;
        /// <summary>
        /// 读取设备
        /// </summary>
@@ -539,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 ();
@@ -574,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; });
@@ -671,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) {
@@ -684,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) {
@@ -695,7 +704,7 @@
                                return;
                            }
                        }
                        BindGateways ();
                        BindGatewaysNew ();
                    }
                } catch (Exception ex) {
                    Console.WriteLine (ex.Message);
@@ -723,7 +732,7 @@
            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 {
@@ -777,7 +786,8 @@
                } 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 {
@@ -834,7 +844,7 @@
            byte [] backBytes = Control.ControlBytesSendHasReturn (Command.SetGateWayAdminInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, adminBytes);
            return CheckIsSuccessfulWithBytes (backBytes);
            return CheckIsSuccessfulWithBytes (backBytes, "Failed to modify gateway administrator information!");
        }
        /// <summary>
@@ -842,11 +852,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;
@@ -854,7 +864,7 @@
                return true;
            } else {
                Application.RunOnMainThread (() => {
                    new Alert ("", Language.StringByID (R.MyInternationalizationString.OperationFailed),
                    new Alert ("", errorStr,
                               Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                });
                return false;
@@ -879,7 +889,7 @@
                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) {
@@ -891,133 +901,64 @@
                }
            }
            BindGateways ();
            BindGatewaysNew ();
        }
        /// <summary>
        /// Gateway setting succeeded,data up.Please wait...
        /// 绑定Mac(印度版)
        /// </summary>
        void BindGateways (){
        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 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 mBindMacObj = new BindMacObj () {
                LoginAccessToken = MainPage.LoginUser.LoginTokenString,
                HomeId = UserConfig.Instance.CurrentRegion.Id,
                MAC = gatewayMAC
                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);
            };
            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 ("", $"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;
            }
            //GetNowHomeGateway ();
            AddMacToUserConfig (gatewayMAC);
        }
        //void GetAllBindGatewarysPagger ()
        //{
        //    var gatewayListObj = new GetAllBindGatewarysPaggerObj ();
        //    gatewayListObj.ReqDto.LoginAccessToken = MainPage.LoginUser.LoginTokenString;
        //    var gatewayListJson = Newtonsoft.Json.JsonConvert.SerializeObject (gatewayListObj);
        //    var gatewayListRevertObj = MainPage.RequestHttps (API.GetAllBindGatewarysPagger, gatewayListJson);
        //    if (gatewayListRevertObj.StateCode.ToUpper () == "SUCCESS") {
        //        var mGateRes = Newtonsoft.Json.JsonConvert.DeserializeObject<AllBindGatewarysPaggerRes> (gatewayListRevertObj.ResponseData.ToString ());
        //        var responseGatewayDataObj = mGateRes.PageData;
        //        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:" + gatewayListRevertObj.StateCode, gatewayListRevertObj.ErrorInfo, Language.StringByID (R.MyInternationalizationString.Close)).Show ();
        //                }
        //            });
        //        }
        //    } else {
        //        ShowGetAllBindGatewarysPaggerErrorInfo (gatewayListRevertObj.StateCode);
        //    }
        //}
        /// <summary>
        /// 修改切换本地住宅 网关
        /// </summary>
        void AddMacToUserConfig (string gatewayMAC)
        {
            UserConfig.Instance.GatewayMAC = gatewayMAC;
            UserConfig.Instance.SaveUserConfig ();
            MainPage.LoginUser.LastTime = DateTime.Now;
@@ -1030,6 +971,92 @@
        ///// <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