using Shared.SimpleControl; using System; using System.Collections.Generic; using System.Security.Cryptography; using System.Text; using System.Text.RegularExpressions; namespace Shared.SimpleControl.Phone { public class AccountLogin : Dialog { public AccountLogin (string account = "", string password = "") { LoginViewShow (account, password); } public void LoginViewShow (string account = "", string password = "") { var bodyView = new FrameLayout () { BackgroundColor = SkinStyle.Current.ViewColor }; AddChidren (bodyView); if (MainPage.LoginUser != null && MainPage.LoginUser.IsLogin == true) { this.Close (); AccountView accView = new AccountView (); UserMiddle.SettingPageView.AddChidren (accView); accView.ShouwAccountView (); UserMiddle.SettingPageView.PageIndex = UserMiddle.SettingPageView.ChildrenCount - 1; } //UserMiddle.LinkStatusTip.BackgroundColor = SkinStyle.Current.LinkStatusTipColor; if (MainPage.LoginUser != null && account == "") { account = MainPage.LoginUser.AccountString; } FrameLayout logoView = new FrameLayout () { Height = Application.GetRealHeight (400), }; bodyView.AddChidren (logoView); //FrameLayout textView = new FrameLayout () { // Y = logoView.Bottom, // Height = Application.GetRealHeight (500), //}; //AddChidren (textView); //FrameLayout buttonView = new FrameLayout () { // Y = textView.Bottom, // Height = Application.GetRealHeight (236), //}; //AddChidren (buttonView); Button btnLogo = new Button () { Y = Application.GetRealHeight (30), Height = Application.GetRealHeight (430), UnSelectedImagePath = MainPage.RegisterLogoString, }; logoView.AddChidren (btnLogo); var accountView = new FrameLayout () { Width = Application.GetMinRealAverage (500), Height = Application.GetMinRealAverage (85), X = Application.GetRealWidth (70), Y = btnLogo.Bottom + Application.GetRealHeight (30), BackgroundImagePath = "Register/Register_Email_Address.png", Radius = (uint)Application.GetRealHeight (0), }; bodyView.AddChidren (accountView); var etAccount = new EditText () { Width = Application.GetRealWidth (400), X = Application.GetRealWidth (100), PlaceholderTextColor = SkinStyle.Current.PlaceholderTextColor, PlaceholderText = Language.StringByID (R.MyInternationalizationString.EmailAddress), TextAlignment = TextAlignment.CenterLeft, Radius = (uint)Application.GetRealHeight (0), TextColor = SkinStyle.Current.TextColor1, Text = account, }; #if DEBUG //Text = "18926269190@189.cn" //etAccount.Text = "721343314@qq.com"; #endif accountView.AddChidren (etAccount); var userConfigBytes = IO.FileUtils.ReadFile ("AccountListDB"); var userConfigString = CommonPage.MyEncodingUTF8.GetString (userConfigBytes); AccountListDB accountListDB = null; if (userConfigString != null) { accountListDB = Newtonsoft.Json.JsonConvert.DeserializeObject (userConfigString); } if (accountListDB == null) { accountListDB = new AccountListDB (); } var accountList = accountListDB.account; //自动填写账号 if (string.IsNullOrEmpty (account)) { if (accountList.Count > 0) { etAccount.Text = accountList [accountList.Count - 1]; } } var accountListView = new VerticalScrolViewLayout () { Width = Application.GetRealWidth (500), Height = Application.GetRealHeight (85 * 2), Y = accountView.Bottom, X = accountView.X, BackgroundColor = SkinStyle.Current.ViewColor, Visible = false, }; var passwrodView = new FrameLayout () { Width = Application.GetMinRealAverage (500), Height = Application.GetMinRealAverage (85), X = Application.GetRealWidth (70), Y = accountView.Bottom + Application.GetRealHeight (50), BackgroundImagePath = "Register/Register_Password_kuang.png", }; bodyView.AddChidren (passwrodView); var etPasswrod = new EditText () { Width = Application.GetRealWidth (400 - 73), X = Application.GetRealWidth (100), PlaceholderTextColor = SkinStyle.Current.PlaceholderTextColor, PlaceholderText = Language.StringByID (R.MyInternationalizationString.PleaseEnterPassword), TextAlignment = TextAlignment.CenterLeft, SecureTextEntry = true, TextColor = SkinStyle.Current.TextColor1, Text = password, }; #if DEBUG etPasswrod.Text = "123456"; #endif passwrodView.AddChidren (etPasswrod); Button btnShowPassword = new Button () { X = etPasswrod.Right, Y = etPasswrod.Y + Application.GetRealHeight (12), Width = Application.GetRealWidth (73), Height = Application.GetRealHeight (60), UnSelectedImagePath = "CrabtreeAdd/HidePW.png", SelectedImagePath = "CrabtreeAdd/ShowPW.png", BorderColor = SkinStyle.Current.Transparent, BorderWidth = 2, Radius = 1 }; passwrodView.AddChidren (btnShowPassword); btnShowPassword.MouseUpEventHandler += (dd, ff) => { btnShowPassword.IsSelected = !btnShowPassword.IsSelected; etPasswrod.SecureTextEntry = !btnShowPassword.IsSelected; }; #if DEBUG int NigelLoginPass = 0; btnLogo.MouseUpEventHandler += (sender, e) => { if (NigelLoginPass == 3) { etAccount.Text = @"464027401@qq.com"; etPasswrod.Text = "qqqqqq"; } else if (NigelLoginPass == 5) { etAccount.Text = @"Jai.singh@havells.com"; etPasswrod.Text = "123456"; } NigelLoginPass++; }; #endif //if (accountList.Count > 0) { // etAccount.Text = accountList [accountList.Count-1]; //} etAccount.EditorEnterAction += (obj) => { Application.HideSoftInput (); etPasswrod.Foucs = true; }; etPasswrod.EditorEnterAction += (obj) => { Application.HideSoftInput (); }; Button btnRegister = new Button () { Width = Application.GetRealWidth (200), Height = Application.GetRealHeight (85), X = Application.GetRealWidth (70), Y = passwrodView.Bottom + Application.GetRealHeight (10), Text = "Sign up", TextSize = 15, TextColor = SkinStyle.Current.TextColor1, TextAlignment = TextAlignment.CenterLeft, }; btnRegister.MouseUpEventHandler += (sender, e) => { Close (); new AccountRegistration_Crabtree ().Show (); }; bodyView.AddChidren (btnRegister); Button btnForgotPassword = new Button () { Width = Application.GetRealWidth (500 / 2), Height = Application.GetRealHeight (85), X = btnRegister.Right + Application.GetRealWidth (50), Y = passwrodView.Bottom + Application.GetRealHeight (10), Text = "Forgot password?", TextSize = 15, TextColor = SkinStyle.Current.TextColor1, TextAlignment = TextAlignment.CenterRight, }; btnForgotPassword.MouseUpEventHandler += (sender, e) => { new ForgotPassword ().Show (); this.Close (); }; 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), BackgroundColor = SkinStyle.Current.MainColor, SelectedBackgroundColor = SkinStyle.Current.SelectedColor, TextID = R.MyInternationalizationString.Login, TextSize = 15, TextColor = SkinStyle.Current.TextColor1, Radius = 5, BorderColor = SkinStyle.Current.Transparent, BorderWidth = 0, }; bodyView.AddChidren (btnLogin); btnLogin.MouseDownEventHandler += (sender, e) => { btnLogin.IsSelected = true; }; btnLogin.MouseUpEventHandler += (sender, e) => { btnLogin.IsSelected = false; account = etAccount.Text.Trim (); password = etPasswrod.Text.Trim (); if (string.IsNullOrEmpty (account) && string.IsNullOrEmpty (password)) { Application.RunOnMainThread (() => { new Tip () { Text = "Please enter your login details.", Direction = AMPopTipDirection.Up, CloseTime = 3 }.Show (btnLogo); }); return; } if (string.IsNullOrEmpty (account)) { Application.RunOnMainThread (() => { new Tip () { Text = "Please enter your user id.", Direction = AMPopTipDirection.Up, CloseTime = 3 }.Show (btnLogo); }); return; } if (string.IsNullOrEmpty (password)) { Application.RunOnMainThread (() => { new Tip () { Text = "Please enter your password.", Direction = AMPopTipDirection.Up, CloseTime = 3 }.Show (btnLogo); }); return; } System.Threading.Tasks.Task.Run (() => { try { Application.RunOnMainThread (() => { if (Language.CurrentLanguage == "Chinese") { MainPage.Loading.Start ("登录中..."); } else { MainPage.Loading.Start ("Login..."); } }); 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); }); return; } var revertConnectionObj = MainPage.RequestHttps (API.Connection, ""); if (revertConnectionObj.StateCode.ToUpper() == "SUCCESS") { Application.RunOnMainThread (() => { if (Language.CurrentLanguage == "Chinese") { MainPage.Loading.Start ("链接服务器成功..."); } else { MainPage.Loading.Start ("Link server successful..."); } }); Login (account, password, accountListDB); } else { MainPage.FailureToServer (); } } catch (Exception ex) { MainPage.FailureToServer (); Console.WriteLine (ex.Message); } finally { Application.RunOnMainThread (() => { MainPage.Loading.Hide (); }); } }); }; etAccount.FoucsChanged += (sender, e) => { //#if __IOS__ //btnRegister.Visible = btnForgotPassword.Visible = !e.Focus; //#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); } if (accountList.Count > 0) { accountListView.Visible = e.Focus; foreach (var dbAccount in accountList) { Button btnDB_Account = new Button () { Height = Application.GetRealHeight (85), Radius = 1, BorderColor = SkinStyle.Current.BorderColor, BorderWidth = 1, BackgroundColor = SkinStyle.Current.ViewColor, TextAlignment = TextAlignment.Center, TextColor = SkinStyle.Current.TextColor1, Text = dbAccount }; accountListView.AddChidren (btnDB_Account); btnDB_Account.MouseUpEventHandler += (asdd, eee) => { etPasswrod.Foucs = true; etAccount.Text = dbAccount; accountListView.Visible = false; }; } } } else { accountListView.Visible = e.Focus; } }; etAccount.TextChangeEventHandler += (sender, e) => { if (e.Length == 0) { accountListView.Visible = false; return; } accountList = accountListDB.account.FindAll ((obj) => (obj.Contains (e) && obj != e)); if (accountList.Count == 0) { accountListView.Visible = false; return; } accountListView.Visible = true; accountListView.RemoveAll (); foreach (var dbAccount in accountList) { Button btnDB_Account = new Button () { Height = Application.GetRealHeight (85), Radius = 1, BorderColor = SkinStyle.Current.BorderColor, TextColor = SkinStyle.Current.TextColor1, BorderWidth = 1, BackgroundColor = SkinStyle.Current.ViewColor, TextAlignment = TextAlignment.Center, Text = dbAccount }; accountListView.AddChidren (btnDB_Account); btnDB_Account.MouseUpEventHandler += (asdd, eee) => { etPasswrod.Foucs = true; etAccount.Text = dbAccount; accountListView.Visible = false; }; } }; btnLogo.MouseDownEventHandler += (sender, e) => { Application.HideSoftInput (); }; bodyView.MouseDownEventHandler += (sender, e) => { Application.HideSoftInput (); }; } /// /// /// /// 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 (); }); } } ///// ///// ///// ///// //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 (); // }); // } //} /// /// 登录 2020-01-11 /// /// Account. /// Password. private void Login (string account, string password, AccountListDB accountListDB) { 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); if (revertObj.StateCode.ToUpper() == "SUCCESS") { //if (!accountListDB.account.Contains (account)) { // accountListDB.account.Add (account); // accountListDB.SaveAccountListDB (); //} if (accountListDB.account.Contains (account)) { accountListDB.account.Remove (account); } accountListDB.account.Add (account); accountListDB.SaveAccountListDB (); var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject (revertObj.ResponseData.ToString ()); var revertData = responseDataObj; MainPage.LoginUser = new UserInfo { LoginToken = revertData.Token, 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 mResidenceRes = Newtonsoft.Json.JsonConvert.DeserializeObject (revertObj2.ResponseData.ToString ()); //if (mResidenceRes.TotalCount != 0) { // //当住宅为空时先提示用户新建住宅 //} else { var revertRoomData = mResidenceRes.PageData; UserConfig.Instance.HomeLists = revertRoomData; if (UserConfig.Instance.CurrentRegion == null) { if (revertRoomData != null && revertRoomData.Count > 0) { var bFind = false; foreach (var mHome in revertRoomData) { if (UserConfig.Instance.CheckThisHomeGatewaysNotEmpty (mHome)) { bFind = true; UserConfig.Instance.CurrentRegion = mHome; break; } } if (!bFind) { UserConfig.Instance.CurrentRegion = revertRoomData [0]; } IO.FileUtils.DeleteAllFile (); } } else { //2020-01-11 var findRoom = revertRoomData.Find ((obj) => obj.Id == UserConfig.Instance.CurrentRegion.Id); if (findRoom != null && UserConfig.Instance.CheckThisHomeGatewaysNotEmpty (findRoom)) { //刷新住宅 解决子账号问题 UserConfig.Instance.CurrentRegion = findRoom; Room.InitAllRoom (); } else { //if (findRoom == null) { if (revertRoomData != null && revertRoomData.Count > 0) { var bFind = false; foreach (var mHome in revertRoomData) { if (UserConfig.Instance.CheckThisHomeGatewaysNotEmpty (mHome)) { bFind = true; UserConfig.Instance.CurrentRegion = mHome; break; } } //if (!bFind) { // UserConfig.Instance.CurrentRegion = revertRoomData [0]; //} if (!bFind) { var findRoom2 = revertRoomData.Find ((obj) => obj.IsOthreShare == false); if (findRoom2 != null) { UserConfig.Instance.CurrentRegion = findRoom2; } else { UserConfig.Instance.CurrentRegion = revertRoomData [0]; } } IO.FileUtils.DeleteAllFile (); } //}else { // //刷新住宅 解决子账号问题 // UserConfig.Instance.CurrentRegion = findRoom; // Room.InitAllRoom (); //} } } ////原方案 //GetAllBindGatewarysPagger (revertRoomData); ////获取当前住宅网关方案 //GetNowHomeGateway (revertRoomData); SaveUserConfig (revertRoomData); //} } else { //GetHomePager 失败提示 ShowGetHomePagerErrorInfo (revertObj2.StateCode); } } 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 (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)://(?[^(:|/]*)"; Regex reg = new Regex (pattern, RegexOptions.IgnoreCase); Match m = reg.Match (URL); string mResult = m.Value; if (!string.IsNullOrEmpty (mResult)) { MainPage.RequestHttpsHostMqtt = mResult; } } /// /// 保存数据 并加载页面 /// /// void SaveUserConfig (List revertRoomData) { UserConfig.Instance.SaveUserConfig (); MainPage.LoginUser.LastTime = DateTime.Now; if (UserConfig.Instance.CheckHomeGatewaysNotEmpty ()) { //UserConfig.Instance.HomeLists = revertRoomData; MainPage.LoginUser.SaveUserInfo (); //UserConfig.Instance.SaveUserConfig (); Scene.Refresh (); A31MusicModel.Refresh (); Application.RunOnMainThread (() => { Close (); UserMiddle.Init (false, true); EquipmentPublicClass.CheckLinkRemote (UserConfig.Instance.internetStatus); }); } else { Application.RunOnMainThread (() => { UserMiddle.Init (false, true); Close (); }); } } ///// ///// 查询当前住宅 网关列表 ///// //void GetNowHomeGateway (List revertRoomData) //{ // 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 mGateRes = Newtonsoft.Json.JsonConvert.DeserializeObject (revertObj3.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 { // Application.RunOnMainThread (() => { // new Alert ("", ErrorCode.FailedGetGatewaysForHome, Language.StringByID (R.MyInternationalizationString.Close)).Show (); // }); // } //} ///// ///// GetAllBindGatewarysPagger ///// ///// //void GetAllBindGatewarysPagger (List revertRoomData) { // 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 (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); // } //} } }