陈嘉乐
2020-01-08 bbc74a6dae2e90a811b2507c5896fe89aa29ccc0
Crabtree/SmartHome/UI/SimpleControl/Phone/Register/AccountLogin.cs
@@ -3,6 +3,7 @@
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
namespace Shared.SimpleControl.Phone
{
@@ -18,7 +19,7 @@
            var bodyView = new FrameLayout () {
                BackgroundColor = SkinStyle.Current.ViewColor
            };
           AddChidren (bodyView);
            AddChidren (bodyView);
            if (MainPage.LoginUser != null && MainPage.LoginUser.IsLogin == true) {
                this.Close ();
@@ -34,7 +35,7 @@
            FrameLayout logoView = new FrameLayout () {
                Height = Application.GetRealHeight (400),
            };
           bodyView.AddChidren (logoView);
            bodyView.AddChidren (logoView);
            //FrameLayout textView = new FrameLayout () {
            //    Y = logoView.Bottom,
@@ -49,7 +50,7 @@
            //AddChidren (buttonView);
            Button btnLogo = new Button () {
                Y = Application.GetRealHeight(30),
                Y = Application.GetRealHeight (30),
                Height = Application.GetRealHeight (430),
                UnSelectedImagePath = MainPage.RegisterLogoString,
            };
@@ -63,7 +64,7 @@
                BackgroundImagePath = "Register/Register_Email_Address.png",
                Radius = (uint)Application.GetRealHeight (0),
            };
           bodyView.AddChidren (accountView);
            bodyView.AddChidren (accountView);
            var etAccount = new EditText () {
                Width = Application.GetRealWidth (400),
@@ -75,7 +76,8 @@
                TextColor = SkinStyle.Current.TextColor1,
                //Text = account,
#if DEBUG
                Text = "18926269190@189.cn"
                //Text = "18926269190@189.cn"
                Text = "721343314@qq.com"
#endif
            };
            accountView.AddChidren (etAccount);
@@ -107,10 +109,10 @@
                Y = accountView.Bottom + Application.GetRealHeight (50),
                BackgroundImagePath = "Register/Register_Password_kuang.png",
            };
           bodyView.AddChidren (passwrodView);
            bodyView.AddChidren (passwrodView);
            var etPasswrod = new EditText () {
                Width = Application.GetRealWidth (400-73),
                Width = Application.GetRealWidth (400 - 73),
                X = Application.GetRealWidth (100),
                PlaceholderTextColor = SkinStyle.Current.PlaceholderTextColor,
                PlaceholderText = Language.StringByID (R.MyInternationalizationString.PleaseEnterPassword),
@@ -125,7 +127,7 @@
            passwrodView.AddChidren (etPasswrod);
            Button btnShowPassword = new Button () {
                X = etPasswrod.Right ,
                X = etPasswrod.Right,
                Y = etPasswrod.Y + Application.GetRealHeight (12),
                Width = Application.GetRealWidth (73),
                Height = Application.GetRealHeight (60),
@@ -160,7 +162,7 @@
            };
            etPasswrod.EditorEnterAction += (obj) => {
                Application.HideSoftInput ();
            };
            };
            Button btnRegister = new Button () {
                Width = Application.GetRealWidth (200),
@@ -176,7 +178,7 @@
                Close ();
                new AccountRegistration_Crabtree ().Show ();
            };
           bodyView.AddChidren (btnRegister);
            bodyView.AddChidren (btnRegister);
            Button btnForgotPassword = new Button () {
                Width = Application.GetRealWidth (500 / 2),
@@ -192,13 +194,13 @@
                new ForgotPassword ().Show ();
                this.Close ();
            };
           bodyView.AddChidren (btnForgotPassword);
            bodyView.AddChidren (btnForgotPassword);
            Button btnLogin = new Button () {
                Width = Application.GetRealWidth (504),
                Height = Application.GetRealHeight (89),
                X = Application.GetRealWidth (60),
                Y = btnRegister.Bottom + Application.GetRealHeight(70),
                Y = btnRegister.Bottom + Application.GetRealHeight (70),
                BackgroundColor = SkinStyle.Current.MainColor,
                SelectedBackgroundColor = SkinStyle.Current.SelectedColor,
                TextID = R.MyInternationalizationString.Login,
@@ -208,7 +210,7 @@
                BorderColor = SkinStyle.Current.Transparent,
                BorderWidth = 0,
            };
           bodyView.AddChidren (btnLogin);
            bodyView.AddChidren (btnLogin);
            btnLogin.MouseDownEventHandler += (sender, e) => {
                btnLogin.IsSelected = true;
            };
@@ -223,7 +225,7 @@
                    });
                    return;
                }
                if (string.IsNullOrEmpty (account) ) {
                if (string.IsNullOrEmpty (account)) {
                    Application.RunOnMainThread (() => {
                        new Tip () { Text = "Please enter your user id.", Direction = AMPopTipDirection.Up, CloseTime = 3 }.Show (btnLogo);
                    });
@@ -244,15 +246,15 @@
                                MainPage.Loading.Start ("Login...");
                            }
                        });
                        if (UserConfig.Instance.internetStatus == 0 || !SystemRemote.checeInternet () ) {
                        if (UserConfig.Instance.internetStatus == 0 || !SystemRemote.checeInternet ()) {
                            Application.RunOnMainThread (() => {
                                new Tip () { Text = "Network abnormal, unable to connect to the Internet", Direction = AMPopTipDirection.Down , CloseTime = 3}.Show (btnLogo);
                                new Tip () { Text = "Network abnormal, unable to connect to the Internet", Direction = AMPopTipDirection.Down, CloseTime = 3 }.Show (btnLogo);
                            });
                            return;
                        }
                        var revertConnectionObj = MainPage.RequestHttps ("Connection", "");
                        if (revertConnectionObj.StateCode == "SUCCESS") {
                        var revertConnectionObj = MainPage.RequestHttps (API.Connection, "");
                        if (revertConnectionObj.StateCode.ToUpper() == "SUCCESS") {
                            Application.RunOnMainThread (() => {
                                if (Language.CurrentLanguage == "Chinese") {
                                    MainPage.Loading.Start ("链接服务器成功...");
@@ -261,71 +263,11 @@
                                }
                            });
                            var requestObj = new LoginObj () { Account = account, Password = password, Company = MainPage.SoftSmsType };
                            var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj);
                            var revertObj = MainPage.RequestHttps ("Login", requestJson, false);
                            if (revertObj.StateCode == "SUCCESS") {
                                if (!accountListDB.account.Contains (account)) {
                                    accountListDB.account.Add (account);
                                    accountListDB.SaveAccountListDB ();
                                }
                                var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<UserLoginRes> (revertObj.ResponseData.ToString ());
                                var revertData = responseDataObj;
                                MainPage.LoginUser = new UserInfo {
                                    ID = revertData.UserId, MasterID = revertData.MainUserId, AccountType = revertData.UserType, AccountString = account, Password = password, LastTime = DateTime.Now,
                                    AllVisionRegisterDevUserNameGuid = revertData.AllVisionRegisterDevUserNameGuid, Name = revertData.Contact
                                };
                                var se = new service.hdlcontrol.com_push.WebServicePush ();
                                se.VerifySoapHeaderValue = new service.hdlcontrol.com_push.VerifySoapHeader () { Email = MainPage.LoginUser.AccountString, UserMode = 0 };
                                se.AddRegId (UserConfig.Instance.tokenID, UserConfig.Instance.phoneName);
                                var requestObj2 = new HomeListObj ();
                                var requestJson2 = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj2);
                                var revertObj2 = MainPage.RequestHttps ("HomeList", requestJson2);
                                if (revertObj2.StateCode == "SUCCESS") {
                                    var responseDataObj2 = Newtonsoft.Json.JsonConvert.DeserializeObject<List<RegionInfoRes>> (revertObj2.ResponseData.ToString ());
                                    var revertRoomData = responseDataObj2;
                                    if (revertRoomData.Find ((obj) => obj.RegionID == UserConfig.Instance.CurrentRegion.RegionID) == null) {
                                        UserConfig.Instance.CurrentRegion = revertRoomData [0];
                                        UserConfig.Instance.GatewayMAC = revertRoomData [0].MAC;
                                        IO.FileUtils.DeleteAllFile ();
                                    } else {
                                        Room.InitAllRoom ();
                                    }
                                    var gatewayListObj = new GatewayListObj ();
                                    var gatewayListJson = Newtonsoft.Json.JsonConvert.SerializeObject (gatewayListObj);
                                    var gatewayListRevertObj = MainPage.RequestHttps ("GatewayList", gatewayListJson);
                                    if (gatewayListRevertObj.StateCode == "SUCCESS") {
                                        UserConfig.Instance.GatewayList.Clear ();
                                        var responseGatewayDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<List<GatewayRes>> (gatewayListRevertObj.ResponseData.ToString ());
                                        UserConfig.Instance.GatewayList.AddRange (responseGatewayDataObj);
                                        UserConfig.Instance.SaveUserConfig ();
                                        MainPage.LoginUser.LastTime = DateTime.Now;
                                        if (UserConfig.Instance.GatewayList.Count == 0) {
                                            Application.RunOnMainThread (() => {
                                                UserMiddle.Init ();
                                                Close ();
                                            });
                                            return;
                                        } else {
                                            UserConfig.Instance.HomeLists = revertRoomData;
                                            MainPage.LoginUser.SaveUserInfo ();
                                            UserConfig.Instance.SaveUserConfig ();
                                            Scene.Refresh ();
                                            A31MusicModel.Refresh ();
                                            Application.RunOnMainThread (() => {
                                                Close ();
                                                UserMiddle.Init ();
                                                EquipmentPublicClass.CheckLinkRemote (2);
                                            });
                                        }
                                    }
                                }
                            }
                            Login (account, password, accountListDB);
                        } else {
                            MainPage.FailureToServer ();
                        }
                    } catch (Exception ex) {
                        MainPage.FailureToServer ();
                        Console.WriteLine (ex.Message);
@@ -334,20 +276,20 @@
                            MainPage.Loading.Hide ();
                        });
                    }
                }) ;
                });
            };
            etAccount.FoucsChanged += ( sender,  e) => {
//#if __IOS__
            etAccount.FoucsChanged += (sender, e) => {
                //#if __IOS__
                //btnRegister.Visible = btnForgotPassword.Visible = !e.Focus;
//#endif
                //#endif
                if (e.Focus) {
                    if (etAccount.Text == "")
                        accountList.Clear ();
                    else
                        accountList = accountListDB.account.FindAll ((obj) => (obj.Contains (etAccount.Text) && obj != etAccount.Text));
                    if (accountListView.Parent == null) {
                       bodyView.AddChidren (accountListView);
                        bodyView.AddChidren (accountListView);
                    }
                    if (accountList.Count > 0) {
                        accountListView.Visible = e.Focus;
@@ -379,7 +321,7 @@
                    accountListView.Visible = false;
                    return;
                }
                    accountList = accountListDB.account.FindAll ((obj) => (obj.Contains (e) && obj != e));
                accountList = accountListDB.account.FindAll ((obj) => (obj.Contains (e) && obj != e));
                if (accountList.Count == 0) {
                    accountListView.Visible = false;
                    return;
@@ -416,6 +358,271 @@
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="stateCodeStr"></param>
        void ShowGetHomePagerErrorInfo (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 ();
                });
            }
        }
        /// <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 ();
                });
            }
        }
        /// <summary>
        /// 登录
        /// </summary>
        /// <param name="account">Account.</param>
        /// <param name="password">Password.</param>
        private void Login (string account, string password, AccountListDB accountListDB)
        {
            //string pattern = @"(http|https)://(?<domain>[^(:|/]*)";
            //Regex reg = new Regex (pattern, RegexOptions.IgnoreCase);
            //Match m = reg.Match (MainPage.RequestHttpsHost);
            //string mResult = m.Groups ["domain"].Value;
            //if (!string.IsNullOrEmpty (mResult)) {
            //    MainPage.RequestHttpsHostMqtt = "https://" + mResult;
            //}
            //return;
            var requestObj = new LoginObj () { Account = account, Password = password, Company = MainPage.SoftSmsType };
            var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj);
            var revertObj = MainPage.RequestHttps (API.Login, requestJson, false, false);
            if (revertObj.StateCode.ToUpper() == "SUCCESS") {
                if (!accountListDB.account.Contains (account)) {
                    accountListDB.account.Add (account);
                    accountListDB.SaveAccountListDB ();
                }
                var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<UserLoginRes> (revertObj.ResponseData.ToString ());
                var revertData = responseDataObj;
                MainPage.LoginUser = new UserInfo {
                    ID = revertData.UserId,
                    MainUserId = revertData.MainUserId,
                    AccountType = revertData.UserType,
                    AccountString = account,
                    Password = password,
                    LastTime = DateTime.Now,
                    AllVisionRegisterDevUserNameGuid = revertData.AllVisionRegisterDevUserNameGuid,
                    Name = revertData.Contact,
                    Guid = revertData.Guid,
                    MD5PWD = revertData.MD5PWD,
                };
                //var se = new service.hdlcontrol.com_push.WebServicePush ();
                //se.VerifySoapHeaderValue = new service.hdlcontrol.com_push.VerifySoapHeader () { Email = MainPage.LoginUser.AccountString, UserMode = 0 };
                //se.AddRegId (UserConfig.Instance.tokenID, UserConfig.Instance.phoneName);
                var requestObj2 = new GetHomePagerObj ();
                requestObj2.ReqDto.LoginAccessToken = MainPage.LoginUser.LoginTokenString;
                var requestJson2 = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj2);
                var revertObj2 = MainPage.RequestHttps (API.GetHomePager, requestJson2);
                if (revertObj2.StateCode.ToUpper () == "SUCCESS") {
                    //var DD = Newtonsoft.Json.Linq.JObject.Parse ("GFGFDG");
                    //DD["ResponseData"]["PageData"];
                    var mResidenceRes = Newtonsoft.Json.JsonConvert.DeserializeObject<ResidenceRes> (revertObj2.ResponseData.ToString ());
                    //if (mResidenceRes.TotalCount != 0) {
                    //    //当住宅为空时先提示用户新建住宅
                    //} else {
                    var revertRoomData = mResidenceRes.PageData;
                    if (revertRoomData.Find ((obj) => obj.Id == UserConfig.Instance.CurrentRegion.Id) == null) {
                        if (revertRoomData != null && revertRoomData.Count > 0) {
                            UserConfig.Instance.CurrentRegion = revertRoomData [0];
                            if (UserConfig.Instance.CheckHomeGateways ()) {
                                UserConfig.Instance.GatewayMAC = revertRoomData [0].HomeGateways [0].GatewayUniqueId;
                            }
                            IO.FileUtils.DeleteAllFile ();
                        }
                    } else {
                        Room.InitAllRoom ();
                    }
                    var gatewayListObj = new GetAllBindGatewarysPaggerObj ();
                    gatewayListObj.ReqDto.LoginAccessToken = MainPage.LoginUser.LoginTokenString;
                    //var gatewayListObj = new GatewayListObj ();
                    var gatewayListJson = Newtonsoft.Json.JsonConvert.SerializeObject (gatewayListObj);
                    var gatewayListRevertObj = MainPage.RequestHttps (API.GetAllBindGatewarysPagger, gatewayListJson);
                    if (gatewayListRevertObj.StateCode.ToUpper () == "SUCCESS") {
                        UserConfig.Instance.GatewayList.Clear ();
                        var mGateRes = Newtonsoft.Json.JsonConvert.DeserializeObject<AllBindGatewarysPaggerRes> (gatewayListRevertObj.ResponseData.ToString ());
                        //var responseGatewayDataObj = mGateRes.PageData;
                        UserConfig.Instance.GatewayList.AddRange (mGateRes.PageData);
                        UserConfig.Instance.SaveUserConfig ();
                        MainPage.LoginUser.LastTime = DateTime.Now;
                        if (UserConfig.Instance.GatewayList.Count == 0) {
                            Application.RunOnMainThread (() => {
                                UserMiddle.Init ();
                                Close ();
                            });
                            return;
                        } else {
                            UserConfig.Instance.HomeLists = revertRoomData;
                            MainPage.LoginUser.SaveUserInfo ();
                            UserConfig.Instance.SaveUserConfig ();
                            Scene.Refresh ();
                            A31MusicModel.Refresh ();
                            Application.RunOnMainThread (() => {
                                Close ();
                                UserMiddle.Init ();
                                EquipmentPublicClass.CheckLinkRemote (2);
                            });
                        }
                    } else {
                        //GetAllBindGatewarysPagger 失败提示
                        ShowGetAllBindGatewarysPaggerErrorInfo (gatewayListRevertObj.StateCode);
                    }
                    //}
                } else {
                    //GetHomePager 失败提示
                    ShowGetHomePagerErrorInfo (revertObj2.StateCode);
                }
                //var requestObj2 = new HomeListObj ();
                //var requestJson2 = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj2);
                //var revertObj2 = MainPage.RequestHttps ("HomeList", requestJson2);
                //if (revertObj2.StateCode.ToUpper() == "SUCCESS") {
                //    var responseDataObj2 = Newtonsoft.Json.JsonConvert.DeserializeObject<List<RegionInfoRes>> (revertObj2.ResponseData.ToString ());
                //    var revertRoomData = responseDataObj2;
                //    if (revertRoomData.Find ((obj) => obj.RegionID == UserConfig.Instance.CurrentRegion.RegionID) == null) {
                //        UserConfig.Instance.CurrentRegion = revertRoomData [0];
                //        UserConfig.Instance.GatewayMAC = revertRoomData [0].MAC;
                //        IO.FileUtils.DeleteAllFile ();
                //    } else {
                //        Room.InitAllRoom ();
                //    }
                //    var gatewayListObj = new GatewayListObj ();
                //    var gatewayListJson = Newtonsoft.Json.JsonConvert.SerializeObject (gatewayListObj);
                //    var gatewayListRevertObj = MainPage.RequestHttps ("GatewayList", gatewayListJson);
                //    if (gatewayListRevertObj.StateCode.ToUpper() == "SUCCESS") {
                //        UserConfig.Instance.GatewayList.Clear ();
                //        var responseGatewayDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<List<GatewayRes>> (gatewayListRevertObj.ResponseData.ToString ());
                //        UserConfig.Instance.GatewayList.AddRange (responseGatewayDataObj);
                //        UserConfig.Instance.SaveUserConfig ();
                //        MainPage.LoginUser.LastTime = DateTime.Now;
                //        if (UserConfig.Instance.GatewayList.Count == 0) {
                //            Application.RunOnMainThread (() => {
                //                UserMiddle.Init ();
                //                Close ();
                //            });
                //            return;
                //        } else {
                //            UserConfig.Instance.HomeLists = revertRoomData;
                //            MainPage.LoginUser.SaveUserInfo ();
                //            UserConfig.Instance.SaveUserConfig ();
                //            Scene.Refresh ();
                //            A31MusicModel.Refresh ();
                //            Application.RunOnMainThread (() => {
                //                Close ();
                //                UserMiddle.Init ();
                //                EquipmentPublicClass.CheckLinkRemote (2);
                //            });
                //        }
                //    }
                //}
                //
            } else {
                string stateCodeStr = revertObj.StateCode;
                string mes = "";
                if (stateCodeStr == "NOTVERIFY") {
                    //未激活
                    mes = ErrorCode.NOTVERIFY;
                }
                //else if (stateCodeStr == "NOTENABLE") {
                //    //该用户属于调试账号,并未启用
                //    mes = "用户属于调试账号,并未启用";
                //}
                else if (stateCodeStr == "USERNAMEORPWDERROR") {
                    //账号或密码错误
                    mes = ErrorCode.USERNAMEORPWDERROR;
                } else if (stateCodeStr == "ACCOUNTNOEXISTS") {
                    //账号不存在
                    mes = ErrorCode.ACCOUNTNOEXISTS;
                } else if (stateCodeStr == "YOUDATANOISLOCALREGION") {
                    //不在本区域,需要重定向区域后再次请求登录
                    if (revertObj.ResponseData == null) {
                        return;
                    }
                    var responseDataObj2 = Newtonsoft.Json.JsonConvert.DeserializeObject<UserLoginLocalRegionRes> (revertObj.ResponseData.ToString ());
                    MainPage.RequestHttpsHost = responseDataObj2.RegionServer;
                    //正则处理
                    //MainPage.RequestHttpsHostMqtt =
                    SetMqttHost (responseDataObj2.RegionServer);
                    ////再次登录
                    Login (account, password, accountListDB);
                } else {
                    //RequestServerFailed
                    mes = ErrorCode.LoginFailed + ErrorCode.Reason + stateCodeStr;
                }
                if (!string.IsNullOrEmpty (mes)) {
                    Application.RunOnMainThread (() => {
                        new Alert ("", mes, Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                    });
                }
            }
        }
        private void SetMqttHost (string URL) {
            string pattern = @"(http|https)://(?<domain>[^(:|/]*)";
            Regex reg = new Regex (pattern, RegexOptions.IgnoreCase);
            Match m = reg.Match (URL);
            string mResult = m.Groups ["domain"].Value;
            if (!string.IsNullOrEmpty (mResult)) {
                MainPage.RequestHttpsHostMqtt = "https://" + mResult;
            }
        }
        //
    }
}