xm
2020-04-16 6fa9d69da922c8049f5acfcbb9ce9fd26811024c
ZigbeeApp/Shared/Phone/UserView/HomePage.cs
New file
@@ -0,0 +1,223 @@
using System;
using Shared.Common;
namespace Shared.Phone.UserView
{
    /// <summary>
    /// Home page.第二版呀
    /// </summary>
    public class HomePage : PageLayout
    {
        static HomePage homePage;
        /// <summary>
        /// Gets the instance.
        /// </summary>
        /// <value>The instance.</value>
        public static HomePage Instance
        {
            get
            {
                if (homePage == null)
                {
                    homePage = new HomePage { IsShowPoint = false };
                }
                return homePage;
            }
        }
        /// <summary>
        /// Inits the page.
        /// </summary>
        public void InitPage()
        {
            if (0 < ChildrenCount)
            {
                return;
            }
            AddChidren(UserPage.Instance);
            UserPage.Instance.InitPage();
            this.PageChange += (sender, e) =>
            {
                while (e < this.ChildrenCount - 1)
                {
                    this.GetChildren(this.ChildrenCount - 1).RemoveFromParent();
                }
                if (e == 0)
                {
                    this.ScrollEnabled = true;
                }
            };
            if (Config.Instance.IsLogin)
            {
                ShowLoginLoadView();
                CommonPage.Loading.Start();
                Action action = async () =>
                {
                    //CommonPage.Loading.Start(Language.StringByID(R.MyInternationalizationString.Logining));
                    var loginSuccess = await LoginByPWDResultAsync(Config.Instance.Account, Config.Instance.Password);
                    if (loginSuccess == 1)
                    {
                        new System.Threading.Thread(async () =>
                        {
                            //登录成功
                            var homes = await House.GetHomeLists();
                            //刷新个人中心的内存及线程
                            await UserCenter.UserCenterLogic.InitUserCenterMenmoryAndThread();
                            //启动ZigBee
                            ZigBee.Common.Application.Init();
                            UserCenter.HdlRoomLogic.Current.InitAllRoom();
                            Application.RunOnMainThread(() =>
                            {
                                CommonPage.Instance.RemoveViewByTag("Login");
                                UserPage.Instance.Fresh();
                                CommonPage.Loading.Hide();
                            });
                        })
                        { IsBackground = true }.Start();
                    }
                    else
                    {
                        //未登录成功弹出登录界面 同时需要标记为未登录状态
                        //Config.Instance.LoginDateTime = new DateTime(1970, 1, 1);
                        //Config.Instance.Save();
                        //var accountLogin = new Device.Account.AccountLogin { };
                        //CommonPage.Instance.AddChidren(accountLogin);
                        //accountLogin.Show();
                        //CommonPage.Loading.Hide();
                        //登录失败,也直接进入主页
                        new System.Threading.Thread(async () =>
                        {
                            //登录成功
                            var homes = await House.GetHomeLists();
                            //刷新个人中心的内存及线程
                            await UserCenter.UserCenterLogic.InitUserCenterMenmoryAndThread();
                            //启动ZigBee
                            ZigBee.Common.Application.Init();
                            UserCenter.HdlRoomLogic.Current.InitAllRoom();
                            Application.RunOnMainThread(() =>
                            {
                                CommonPage.Instance.RemoveViewByTag("Login");
                                UserPage.Instance.Fresh();
                                CommonPage.Loading.Hide();
                            });
                        })
                        { IsBackground = true }.Start();
                    }
                };
                //登录过直接后台登录
                action();
            }
            else
            {
                //未登录弹出登录界面
                var accountLogin = new Login.AccountLogin { };
                Shared.Common.CommonPage.Instance.AddChidren(accountLogin);
                accountLogin.Show();
                //accountLogin.ShowForm();
            }
        }
        public void ShowLoginLoadView()
        {
            var loginLoad = new LoginLoading { };
            CommonPage.Instance.AddChidren(loginLoad);
            loginLoad.Show();
        }
        /// <summary>
        /// Logins the by PWDA sync.
        /// </summary>
        /// <returns>The by PWDA sync.</returns>
        /// <param name="account">Account.</param>
        /// <param name="password">Password.</param>
        /// <param name="source">Source.</param>
        /// <param name="company">Company.</param>
        public async System.Threading.Tasks.Task<int> LoginByPWDAsync(string account, string password, string source = "", int company = 0)
        {
            var isLoginSuccess = -1;
            try
            {
                var requestObj = new SendDataToServer.LoginObj
                {
                    Account = account,
                    Password = password,
                    Source = source,
                    Company = company
                };
                var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(requestObj);
                var revertObj = await CommonPage.Instance.RequestHttpsZigbeeAsync("ZigbeeUsers/Login", System.Text.Encoding.UTF8.GetBytes(requestJson));
                if (revertObj == null)
                {
                    isLoginSuccess = -1;
                    return isLoginSuccess;
                }
                var stateCodeStr = revertObj.StateCode.ToUpper();
                //Error 不能直接从服务器取,只能根据状态码逐一判断
                if (stateCodeStr == "SUCCESS")
                {
                    if (revertObj.ResponseData == null)
                    {
                        return -1;
                    }
                    var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<Shared.Common.ResponseEntity.UserLoginRes>(revertObj.ResponseData.ToString());
                    var revertData = responseDataObj;
                    //标记上一次是不是同一个账号登陆
                    UserCenter.UserCenterResourse.ResidenceOption.TheSameLoginAccount = Config.Instance.Guid == revertData.Guid;
                    Config.Instance.Account = revertData.Account;
                    Config.Instance.Password = password;
                    Config.Instance.MD5PWD = revertData.MD5PWD;
                    Config.Instance.Guid = revertData.Guid;
                    Config.Instance.LoginDateTime = DateTime.Now;
                    Config.Instance.LoginToken = revertData.Token;
                    isLoginSuccess = 1;
                    var resultRegID = await Shared.Common.CommonPage.Instance.PushRegID();
                    System.Console.WriteLine($"后台登录成功--{Config.Instance.LoginDateTime}");
                }
                else if (stateCodeStr == "YOUDATANOISLOCALREGION")
                {
                    isLoginSuccess = -1;
                    //不在本区域,需要重定向区域后再次请求登录
                    if (revertObj.ResponseData == null)
                    {
                        return isLoginSuccess;
                    }
                    var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<Shared.Common.ResponseEntity.UserLoginLocalRegionRes>(revertObj.ResponseData.ToString());
                    CommonPage.RequestHttpsHost = responseDataObj.RegionServer;
                }
                else
                {
                    isLoginSuccess = -1;
                }
            }
            catch
            {
                isLoginSuccess = -1;
            }
            return isLoginSuccess;
        }
        /// <summary>
        /// 后台登录
        /// -1 失败  1 成功
        /// </summary>
        /// <returns>The by PWDA sync.</returns>
        /// <param name="account">Account.</param>
        /// <param name="password">Password.</param>
        /// <param name="source">Source.</param>
        /// <param name="company">Company.</param>
        public async System.Threading.Tasks.Task<int> LoginByPWDResultAsync(string account, string password, string source = "", int company = 0)
        {
            var isLoginSuccess = await LoginByPWDAsync(account, password, source, company);
            return isLoginSuccess;
        }
    }
}