From 454ac814944cf956ff02b84b70ba2ec68e5e5ea1 Mon Sep 17 00:00:00 2001
From: JLChen <551775569@qq.com>
Date: 星期三, 15 一月 2020 19:38:47 +0800
Subject: [PATCH] 2020-01-15 1.优化MQTT连接。 2.增加本地通信加密。

---
 Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideAddResidence.cs |  200 ++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 155 insertions(+), 45 deletions(-)

diff --git a/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideAddResidence.cs b/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideAddResidence.cs
index 5b6880d..1cbb57a 100644
--- a/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideAddResidence.cs
+++ b/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideAddResidence.cs
@@ -5,12 +5,15 @@
 {
     public class GuideAddResidence : FrameLayout
     {
+        public bool IsHideBack = false;
+
+
         public GuideAddResidence ()
         {
             BackgroundColor = SkinStyle.Current.MainColor;
         }
 
-        public void ShowHomeList (bool showDialog = true)
+        public void ShowHomeList (bool showDialog = false)
         {
             new System.Threading.Thread (() => {
                 bool needHide = true;
@@ -52,7 +55,7 @@
                                 });
                             }
                             UserConfig.Instance.SaveUserConfig ();
-                            UserConfig.Instance.CurrentRegion = responseDataObj.Find ((obj) => obj.Name == UserConfig.Instance.CurrentRegion.Name);
+                            UserConfig.Instance.CurrentRegion = responseDataObj.Find ((obj) => obj.Id == UserConfig.Instance.CurrentRegion.Id);
                         } else {
                             Application.RunOnMainThread (() => {
                                 MainPage.Loading.Hide ();
@@ -140,9 +143,10 @@
             };
             topView.AddChidren (ItemButton);
             ItemButton.MouseUpEventHandler += (sender1, e1) => {
-                GuideAddHomeDialog (new RegionInfoRes () { Id = "",  Name = "" }, false);
+                //GuideAddHomeDialog (new RegionInfoRes () { Id = "",  Name = "" }, false);
+                GuideAddHomeDialog (new RegionInfoRes () { Id = "", Name = "" }, false);
             };
-            if (showDialog) {
+            if (!IsHideBack) {
                 var back = new Button () {
                     Height = Application.GetRealHeight (90),
                     Width = Application.GetRealWidth (85),
@@ -173,7 +177,14 @@
                 }
             } catch { }
 
-            if (UserConfig.Instance.GatewayList  !=null && UserConfig.Instance.GatewayList.Count == 0) {
+            //if (UserConfig.Instance.GatewayList != null && UserConfig.Instance.GatewayList.Count == 0) {
+            //    if (showDialog) {
+            //        GuideAddHomeDialog (UserConfig.Instance.HomeLists [0], true);
+            //        UserConfig.Instance.CurrentRegion = UserConfig.Instance.HomeLists [0];
+            //    }
+            //}
+
+            if (!UserConfig.Instance.CheckHomeGateways()) {
                 if (showDialog) {
                     GuideAddHomeDialog (UserConfig.Instance.HomeLists [0], true);
                     UserConfig.Instance.CurrentRegion = UserConfig.Instance.HomeLists [0];
@@ -186,7 +197,7 @@
         /// </summary>
         /// <param name="home">Home.</param>
         /// <param name="VerticalScrolViewMiddle">Vertical scrol view middle.</param>
-        void AddResidenceListRow (RegionInfoRes home, VerticalScrolViewLayout VerticalScrolViewMiddle )
+        void AddResidenceListRow (RegionInfoRes home, VerticalScrolViewLayout VerticalScrolViewMiddle)
         {
             var rowView = new RowLayout () {
                 Height = Application.GetRealHeight (110),
@@ -220,11 +231,28 @@
             };
             rowView.AddChidren (btnName);
 
+
+            //鏄剧ず鍒嗕韩鎸夐挳
+            if (home.IsOthreShare) {
+                Button FromSharingButton = new Button () {
+                    X = Application.GetRealWidth (480),
+                    Width = Application.GetRealWidth (30),
+                    Height = Application.GetRealHeight (30),
+                    Gravity = Gravity.CenterVertical,
+                    UnSelectedImagePath = "CrabtreeAdd/FromSharing.png",
+                    SelectedImagePath = "CrabtreeAdd/FromSharing.png",
+                };
+                rowView.AddChidren (FromSharingButton);
+            }
+
             var goNextButton = new Button () {
                 X = Application.GetRealWidth (500),
                 Width = Application.GetRealWidth (120),
             };
             rowView.AddChidren (goNextButton);
+
+         
+      
 
 
             Button rightButton1 = new Button () {
@@ -236,8 +264,17 @@
                 SelectedImagePath = "Item/RightSelected.png",
             };
             rowView.AddChidren (rightButton1);
+
+
+           
+
             EventHandler<MouseEventArgs> eHandler = (sender, e) => {
                 if (home.Id == UserConfig.Instance.CurrentRegion.Id) {
+                    if (home.IsOthreShare) {
+                        //鎻愮ず娌℃湁鍒嗕韩浣忓畢鐨勬潈闄�
+                        new Alert ("", ErrorCode.InsufficientAuthority, "Close").Show ();
+                        return;
+                    }
                     //UserConfig.Instance.GatewayMAC = gatewayMAC;
                     var addGatewayDialog = new GuideAddGateway ();
                     (Parent as PageLayout).AddChidren (addGatewayDialog);
@@ -247,11 +284,16 @@
                     ChangeRegion (home);
                 }
             };
-                rightButton1.MouseUpEventHandler += eHandler;
+            rightButton1.MouseUpEventHandler += eHandler;
             goNextButton.MouseUpEventHandler += eHandler;
-            btnName.MouseUpEventHandler += (sender,e)=> {
+            btnName.MouseUpEventHandler += (sender, e) => {
                 if (home.Id == UserConfig.Instance.CurrentRegion.Id) {
-                    GuideAddHomeDialog (home, false,true, btnName);
+                    if (home.IsOthreShare) {
+                        //鎻愮ず娌℃湁鍒嗕韩浣忓畢鐨勬潈闄�
+                        new Alert ("", ErrorCode.InsufficientAuthority, "Close").Show ();
+                        return;
+                    }
+                    GuideAddHomeDialog (home, false, true, btnName);
                 } else {
                     ChangeRegion (home);
                 }
@@ -274,6 +316,12 @@
                 };
                 rowView.AddRightView (btnDel);
                 btnDel.MouseUpEventHandler += (sd, ee) => {
+                    if (home.IsOthreShare) {
+                        //鎻愮ず娌℃湁鍒嗕韩浣忓畢鐨勬潈闄�
+                        new Alert ("", ErrorCode.InsufficientAuthority, "Close").Show ();
+                        return;
+                    }
+
                     Dialog dialog = new Dialog ();
 
                     FrameLayout dialogBody = new FrameLayout () {
@@ -363,10 +411,13 @@
                                 });
                                 var requestObj = new LoginObj () { Account = MainPage.LoginUser.AccountString, Password = password };
                                 var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj);
-                                var revertObj = MainPage.RequestHttps (API.Login, requestJson, false, false);
-                                if (revertObj.StateCode.ToUpper() == "SUCCESS") {
+                                var revertObj = MainPage.RequestHttps (API.Login, requestJson);
+                                if (revertObj.StateCode.ToUpper () == "SUCCESS") {
 
-                                    var requestObj2 = new DelHomeObj () { HomeId = home.Id };
+                                    var requestObj2 = new DelHomeObj () {
+                                        HomeId = home.Id,
+                                        LoginAccessToken = MainPage.LoginUser.LoginTokenString
+                                    };
                                     var requestJson2 = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj2);
                                     var revertObj2 = MainPage.RequestHttps (API.DelHome, requestJson2);
                                     if (revertObj2.StateCode.ToUpper () == "SUCCESS") {
@@ -404,7 +455,7 @@
             if (stateCodeStr == "NoLogin") {
                 mes = ErrorCode.NoLogin;
             } else if (stateCodeStr == "CurrentHomeExixtsGatewayBind") {
-                mes = ErrorCode.HomeIdAndTokenNoConsistent;
+                mes = ErrorCode.CurrentHomeExixtsGatewayBind;
             } else if (stateCodeStr == ErrorCode.NetworkError) {
                 mes = ErrorCode.NetworkError;
             } else {
@@ -425,18 +476,21 @@
         /// </summary>
         /// <param name="home">Home.</param>
         /// <param name="gatewayMAC">Gateway mac.</param>
-        void ChangeRegion (RegionInfoRes home, bool goHomePage = true)
+        ///
+        void ChangeRegion (RegionInfoRes home, bool goHomePage = true, bool bNeedCheckAddRoom = false, bool goToGuideAddGatewayView = false)
         {
+            if (home == null || string.IsNullOrEmpty (home.Id)) return;
+
             MainPage.Loading.Start ("Please wait...");
             System.Threading.Tasks.Task.Run (() => {
                 try {
                     //if (home.RegionID != UserConfig.Instance.CurrentRegion.RegionID) {
                     var backuplist = IO.FileUtils.ReadFiles ();
                     int index = 0;
-                    if (string.IsNullOrEmpty (UserConfig.Instance.CurrentRegion.Name)) {
+                    if (string.IsNullOrEmpty (UserConfig.Instance.CurrentRegion.Id)) {
                         UserConfig.Instance.CurrentRegion = UserConfig.Instance.HomeLists [0];
                     }
-                    string oldRegionRootPath = IO.FileUtils.CreateRegionBackup (UserConfig.Instance.CurrentRegion.Name);
+                    string oldRegionRootPath = IO.FileUtils.CreateRegionBackup (UserConfig.Instance.CurrentRegion.Id);
                     IO.FileUtils.DeleteRegionFiles (oldRegionRootPath);
                     foreach (var fileName in backuplist) {
                         System.IO.FileInfo fileInfo = new System.IO.FileInfo (IO.FileUtils.RootPath + fileName);
@@ -451,13 +505,15 @@
                         });
                     }
                     IO.FileUtils.DeleteAllFile ();
-                    string newRegionRootPath = IO.FileUtils.CreateRegionBackup (home.Name);
+                    string newRegionRootPath = IO.FileUtils.CreateRegionBackup (home.Id);
                     IO.FileUtils.RestoreRegionFiles (newRegionRootPath);
                     UserConfig.Instance.CurrentRegion = home;
                     UserConfig.Instance.SaveUserConfig ();
                     Room.InitAllRoom ();
                     Application.RunOnMainThread (() => {
-                        ShowHomeList ();
+                        ShowHomeList (false);
+
+
                         if (goHomePage) {
                             UserConfig.Instance.RefreshUserConfig ();
                             new Alert ("", Language.StringByID (R.MyInternationalizationString.SwitchRegionSuccessfully),
@@ -466,8 +522,20 @@
                             CommonPage.IsRemote = false;
                             EquipmentPublicClass.CheckLinkRemote (2);
                         }
+                        if (bNeedCheckAddRoom) {
+                            CheckIfNeedAddRoom ();
+                        }
+
+                        if (goToGuideAddGatewayView) {
+                            var addGatewayDialog = new GuideAddGateway ();
+                            UserMiddle.guidePageView.AddChidren (addGatewayDialog);
+                            addGatewayDialog.ShowPage (home);//guidePageView
+                            UserMiddle.guidePageView.PageIndex = 1;
+                        }
                     });
                     MainPage.LoginUser.SaveUserInfo ();
+                    
+
                     //}
                 } catch (Exception ex) {
                     Application.RunOnMainThread (() => {
@@ -570,25 +638,41 @@
                     return;
                 }
                 if (isChangeName) {
-                    home.Name = button.Text = etZoneName.Text;
-                    var requestObj2 = new EditHomeObj () { HomeId = home.Id, Name = home.Name };
+                    //home.Name = button.Text = etZoneName.Text;
+                    var requestObj2 = new EditHomeObj () { HomeId = home.Id, Name = etZoneName.Text, LoginAccessToken = MainPage.LoginUser.LoginTokenString };
+                    string urlHead = MainPage.RequestHttpsHost;
+                    if (requestObj2.IsOtherAccountCtrl) {
+                        urlHead = UserConfig.Instance.MasterAccountRequestBaseUrl;
+                        requestObj2.LoginAccessToken = UserConfig.Instance.MasterAccountToken;
+                    }
+
                     var requestJson2 = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj2);
-                    var revertObj2 = MainPage.RequestHttps (API.EditHome, requestJson2);
+                    var revertObj2 = MainPage.RequestHttps (API.EditHome, requestJson2, urlHead);
+                    if (revertObj2.StateCode.ToUpper () != "SUCCESS") {
+                        ShowEditHomeErrorInfo (revertObj2.StateCode);
+                        return;
+                    }
+                    home.Name = button.Text = etZoneName.Text;
                     IO.FileUtils.ReNameFoler (UserConfig.Instance.CurrentRegion.Name, home.Name);
                     return;
                 }
-                ChangeRegion (home, false);
-                var addGatewayDialog = new GuideAddGateway ();
-                if (guide) {
-                    EditResidence (home, etZoneName.Text.Trim ());
-                    UserMiddle.guidePageView.AddChidren (addGatewayDialog);
-                    addGatewayDialog.ShowPage (home);//guidePageView
-                    UserMiddle.guidePageView.PageIndex = 1;
-                } else {
-                    UserMiddle.SettingPageView.AddChidren (addGatewayDialog);
-                    addGatewayDialog.ShowPage (home);
-                    UserMiddle.SettingPageView.PageIndex = 2;
-                }
+
+                //ChangeRegion (home, false);
+                EditResidence (home, etZoneName.Text.Trim (), guide);
+
+               
+                //if (guide) {
+
+                //    //ShowHomeList ();
+                //    EditResidence (home, etZoneName.Text.Trim ());
+                //    var addGatewayDialog = new GuideAddGateway ();
+                //    UserMiddle.guidePageView.AddChidren (addGatewayDialog);
+                //    addGatewayDialog.ShowPage (home);//guidePageView
+                //    UserMiddle.guidePageView.PageIndex = 1;
+                //} else {
+                //    EditResidence (home, etZoneName.Text.Trim ());
+                    
+                //}
             };
 
             if(!guide)
@@ -620,10 +704,10 @@
         /// </summary>
         /// <param name="home">Home.</param>
         /// <param name="residenceName">Et zone name string.</param>
-        bool EditResidence (RegionInfoRes home,string residenceName)
+        bool EditResidence (RegionInfoRes home, string residenceName, bool goToGuideAddGatewayView = false)
         {
             if (home.Name != residenceName) {
-                home.Name = residenceName;
+               
                 if (string.IsNullOrEmpty(home.Id)) {
                     var requestObj21 = new AddHomeObj () {
                         Name = residenceName ,
@@ -636,19 +720,48 @@
                         ShowAddHomeErrorInfo (revertObj21.StateCode);
                         return false;
                     }
+                    home.Name = residenceName;
+                    //鍒涘缓浣忓畢鎴愬姛锛屽垏鎹㈠埌璇ヤ綇瀹�
+                    var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<List<RegionInfoRes>> (revertObj21.ResponseData.ToString ());
+                    if (responseDataObj != null && responseDataObj.Count > 0) {
+                        ChangeRegion (responseDataObj [0], false, true, goToGuideAddGatewayView);
+                      
+                    } 
                 } else {
-                    var requestObj2 = new EditHomeObj () { HomeId = home.Id, Name = home.Name };
+                    var requestObj2 = new EditHomeObj () { HomeId = home.Id, Name = residenceName, LoginAccessToken = MainPage.LoginUser.LoginTokenString };
+                    string urlHead = MainPage.RequestHttpsHost;
+                    if (requestObj2.IsOtherAccountCtrl) {
+                        urlHead = UserConfig.Instance.MasterAccountRequestBaseUrl;
+                        requestObj2.LoginAccessToken = UserConfig.Instance.MasterAccountToken;
+                    }
                     var requestJson2 = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj2);
-                    var revertObj2 = MainPage.RequestHttps (API.EditHome, requestJson2);
-                    IO.FileUtils.ReNameFoler (UserConfig.Instance.CurrentRegion.Name, home.Name);
+                    var revertObj2 = MainPage.RequestHttps (API.EditHome, requestJson2, urlHead);
                     if (revertObj2.StateCode.ToUpper()  != "SUCCESS") {
                         ShowEditHomeErrorInfo (revertObj2.StateCode);
                         return false;
                     }
+                    home.Name = residenceName;
+                    IO.FileUtils.ReNameFoler (UserConfig.Instance.CurrentRegion.Name, home.Name);
+                    ChangeRegion (home, false, true, goToGuideAddGatewayView);
+                    //CheckIfNeedAddRoom ();
                 }
-                UserConfig.Instance.CurrentRegion = home;
-                UserConfig.Instance.SaveUserConfig ();
+
+                //ShowHomeList (false);
+                //2020-01-09 鍘绘帀鍒囨崲浣忓畢
+                //UserConfig.Instance.CurrentRegion = home;
+                //UserConfig.Instance.SaveUserConfig ();
+            }else {
+                ChangeRegion (home, false, true, goToGuideAddGatewayView);
+                //CheckIfNeedAddRoom ();
             }
+            return true;
+        
+        }
+
+        /// <summary>
+        /// 妫�娴嬫槸鍚﹂粯璁ゅ垱寤烘埧闂�
+        /// </summary>
+        void CheckIfNeedAddRoom () {
             if (Room.Lists.FindAll ((obj) => obj.Name == "Living Room" || obj.Name == "Bedroom").Count == 0) {
                 Room room = new Room ();
                 string newRoomFilePath = typeof (Room).Name + "_Living Room";
@@ -665,12 +778,9 @@
                 room.Add (newRoomFilePath);
                 room.Save (newRoomFilePath);
                 Room.Lists.Add (room);
+
+                Room.InitAllRoom ();
             }
-            if (home.Name != residenceName) {
-                ShowHomeList ();
-            }
-            return true;
-        
         }
 
 

--
Gitblit v1.8.0