using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using Shared.Common;
namespace Shared.Phone
{
///
/// 登陆界面的逻辑
///
public class HdlAccountLogic
{
#region ■ 变量声明___________________________
///
/// 登陆界面的逻辑
///
private static HdlAccountLogic m_Current;
///
/// 登陆界面的逻辑
///
public static HdlAccountLogic Current
{
get
{
if (m_Current == null)
{
m_Current = new HdlAccountLogic();
}
return m_Current;
}
}
#endregion
#region ■ 账号注册___________________________
///
/// 注册账号,并返回已翻译的错误信息(返回null代表成功)
///
/// 手机号或者邮箱
/// 密码
/// 验证码
///
public string RegisterAccount(string i_account, string i_password, string i_verifyCode)
{
string accountName = i_account.Contains("@") == true ? "memberEmail" : "memberPhone";
var dicBody = new Dictionary();
dicBody["memberName"] = i_account;
dicBody[accountName] = i_account;
dicBody["loginPwd"] = i_password;
dicBody["verifyCode"] = i_verifyCode;
var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("smart-footstone/member/oauth/register", RestSharp.Method.POST, dicBody, null, null, CheckMode.A不检测, false, 5, true);
if (result == null)
{
//注册失败
return HdlMessageLogic.Current.TranslateHttpCode(HttpMessageEnum.A10017);
}
if (result.Code == HttpMessageEnum.A成功)
{
return null;
}
//获取翻译
string errorMsg = HdlMessageLogic.Current.TranslateHttpCode(result.Code);
if (errorMsg == null)
{
//注册失败
return HdlMessageLogic.Current.TranslateHttpCode(HttpMessageEnum.A10017);
}
return errorMsg;
}
#endregion
#region ■ 发送验证码_________________________
///
/// 发送验证码到邮箱,并返回已翻译的错误信息(返回null代表成功)
///
/// 邮箱
/// 验证码的类型
/// 验证码过期时间(秒)
///
public string SendVeriCodeToEmail(string i_email, VerCodeType codeType, int i_codeTime = 300)
{
//去获取它的区域地址(null:无法联网 空字符串:账号不存在 非空:正常获取)
var strUrl = this.GetAccoutRegionInfo(i_email);
if (strUrl == null)
{
//发送验证码失败
return HdlMessageLogic.Current.TranslateHttpCode(HttpMessageEnum.A10210);
}
//检测接口返回的账号的Url是否有问题
var errorMsg = this.CheckAccoutRegionUrlByCodeType(strUrl, codeType);
if (errorMsg != null)
{
return errorMsg;
}
var pra = new { mail = i_email, verifyType = (int)codeType, expireSecond = i_codeTime };
//请求Url的完成路径(发送验证码需要另外获取地址)
var fullUrl = strUrl + "/smart-footstone/verification/message/send";
var result = HdlHttpLogic.Current.DoRequestZigbeeHttps(fullUrl, Config.Instance.Token, RestSharp.Method.POST, pra, null, null, CheckMode.A不检测, 3, true);
//转换数据
var respone = HdlHttpLogic.Current.ConvertData(result);
if (respone == null)
{
//发送验证码失败
return HdlMessageLogic.Current.TranslateHttpCode(HttpMessageEnum.A10210);
}
if (respone.Code == HttpMessageEnum.A成功)
{
return null;
}
//获取翻译
errorMsg = HdlMessageLogic.Current.TranslateHttpCode(respone.Code);
if (errorMsg == null)
{
//发送验证码失败
return HdlMessageLogic.Current.TranslateHttpCode(HttpMessageEnum.A10210);
}
return errorMsg;
}
///
/// 发送验证码到手机,并返回已翻译的错误信息(返回null代表成功)
///
/// 地区码
/// 手机号
/// 验证码的类型
/// CHINESE or ENGLISH,当不指定时,默认使用底层变量
/// 验证码过期时间(秒)
///
public string SendVeriCodeToPhone(string i_areaCode, string i_phone, VerCodeType codeType, string i_lanType = null, int i_codeTime = 300)
{
//去获取它的区域地址(null:无法联网 空字符串:账号不存在 非空:正常获取)
var strUrl = this.GetAccoutRegionInfo(i_phone);
if (strUrl == null)
{
//发送验证码失败
return HdlMessageLogic.Current.TranslateHttpCode(HttpMessageEnum.A10210);
}
//检测接口返回的账号的Url是否有问题
var errorMsg = this.CheckAccoutRegionUrlByCodeType(strUrl, codeType);
if (errorMsg != null)
{
return errorMsg;
}
if (i_lanType == null)
{
i_lanType = Config.Instance.HttpLanguage;
}
var pra = new { phone = i_phone, phonePrefix = i_areaCode, languageType = i_lanType, verifyType = (int)codeType, expireSecond = i_codeTime };
//请求Url的完成路径(发送验证码需要另外获取地址)
var fullUrl = strUrl + "/smart-footstone/verification/message/send";
var result = HdlHttpLogic.Current.DoRequestZigbeeHttps(fullUrl, Config.Instance.Token, RestSharp.Method.POST, pra, null, null, CheckMode.A不检测, 3, true);
//转换数据
var respone = HdlHttpLogic.Current.ConvertData(result);
if (respone == null)
{
//发送验证码失败
return HdlMessageLogic.Current.TranslateHttpCode(HttpMessageEnum.A10210);
}
if (respone.Code == HttpMessageEnum.A成功)
{
return null;
}
//获取翻译
errorMsg = HdlMessageLogic.Current.TranslateHttpCode(respone.Code);
if (errorMsg == null)
{
//发送验证码失败
return HdlMessageLogic.Current.TranslateHttpCode(HttpMessageEnum.A10210);
}
return errorMsg;
}
///
/// 校验验证码
///
/// 手机号或者邮箱
/// 验证码的类型
/// 验证码
///
public bool CheckVeriCode(string i_account, VerCodeType codeType, string i_verifyCode)
{
//去获取它的区域地址(null:无法联网 空字符串:账号不存在 非空:正常获取)
var strUrl = this.GetAccoutRegionInfo(i_account);
if (strUrl == null)
{
//发送验证码失败
return false;
}
//检测接口返回的账号的Url是否有问题
var errorMsg = this.CheckAccoutRegionUrlByCodeType(strUrl, codeType);
if (errorMsg != null)
{
return false;
}
string accountName = i_account.Contains("@") == true ? "mail" : "phone";
var dicBody = new Dictionary();
dicBody[accountName] = i_account;
dicBody["verifyType"] = ((int)codeType).ToString();
dicBody["verifyCode"] = i_verifyCode;
//请求Url的完成路径(校验验证码需要另外获取地址)
var fullUrl = strUrl + "/smart-footstone/verification/message/check";
var result = HdlHttpLogic.Current.DoRequestZigbeeHttps(fullUrl, Config.Instance.Token, RestSharp.Method.POST, dicBody, null, null, CheckMode.A不检测, 3, true);
//转换数据
var respone = HdlHttpLogic.Current.ConvertData(result);
if (respone == null)
{
return false;
}
return respone.Code == HttpMessageEnum.A成功;
}
///
/// 检测接口返回的账号的Url是否有问题(null:没问题 非null:已经翻译了的错误信息)
///
/// 接口返回的账号的Url(null的话不要调用)
/// 验证码类型
///
private string CheckAccoutRegionUrlByCodeType(string i_url, VerCodeType codeType)
{
if (codeType == VerCodeType.A注册)
{
//账号已经注册
if (i_url != string.Empty) { return HdlMessageLogic.Current.TranslateHttpCode(HttpMessageEnum.A10016); }
}
else if (codeType == VerCodeType.A找回密码)
{
//账号不存在
if (i_url == string.Empty) { return HdlMessageLogic.Current.TranslateHttpCode(HttpMessageEnum.A10010); }
}
else if (codeType == VerCodeType.A登陆)
{
//账号不存在
if (i_url == string.Empty) { return HdlMessageLogic.Current.TranslateHttpCode(HttpMessageEnum.A10010); }
}
else if (codeType == VerCodeType.A绑定)
{
//账号已经注册
if (i_url != string.Empty) { return HdlMessageLogic.Current.TranslateHttpCode(HttpMessageEnum.A10016); }
}
else if (codeType == VerCodeType.A其他)
{
//账号不存在
if (i_url == string.Empty) { return HdlMessageLogic.Current.TranslateHttpCode(HttpMessageEnum.A10010); }
}
return null;
}
#endregion
#region ■ 账号密码登陆_______________________
///
/// 自动登陆(可能状态码:Sucess PswError NotNetWork OtherError)
///
public AccountStatu AutoLoginByRefreshToken()
{
//初始化账号所在的区域地址(-1:获取不到,云端上没这个账号 1:正常 2:无网)
var result = this.InitAccoutRegionInfo(Config.Instance.Account);
if (result != AccountStatu.Sucess)
{
//没网,或者账号不存在,都不用往下走
return result;
}
result = AccountStatu.OtherError;
//登陆
var revertObj = this.LoginByRefreshToken();
if (revertObj == null)
{
//没有网络
result = AccountStatu.NotNetWork;
}
else if (revertObj.Code == HttpMessageEnum.A成功)
{
//上报设备ID
this.PushDeviceIdToDB();
result = AccountStatu.Sucess;
}
//没网,或者是有网并且登陆成功时,刷新个人信息
if (result == AccountStatu.Sucess || result == AccountStatu.NotNetWork)
{
//初始化登陆账号的信息(登陆的,这里成不成功都无所谓)
this.InitUserAccoutInfo(true, result == AccountStatu.Sucess);
}
return result;
}
///
/// 账号密码登陆(成功时,自动刷新Config)
///
/// 账号
/// 密码
public ResponsePack LoginByPassword(string i_account, string i_password)
{
//初始化账号所在的区域地址(可能状态码:Sucess NotAccount NotNetWork)
var result = this.InitAccoutRegionInfo(i_account);
if (result == AccountStatu.NotAccount)
{
//账号不存在
return new ResponsePack { Code = HttpMessageEnum.A10010 };
}
if (result == AccountStatu.NotNetWork)
{
//没网,不用往下走
return null;
}
//登陆
var pra = new { grantType = "password", account = i_account, loginPwd = i_password };
var revertObj = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("smart-footstone/member/oauth/login", RestSharp.Method.POST, pra, null, null, CheckMode.A不检测, false, 3, true);
if (revertObj != null && revertObj.Code == HttpMessageEnum.A成功)
{
//云端不再返回账号字段
Config.Instance.Account = i_account;
//根据登陆之后,云端返回的数据,刷新Config
this.RefreshConfigDataByLoginData(revertObj);
//初始化登陆账号的信息(登陆的,这里成不成功都无所谓)
this.InitUserAccoutInfo(true, true);
}
return revertObj;
}
///
/// 验证码登陆(成功时,自动刷新Config)
///
/// 手机或者邮箱
/// 验证码
public ResponsePack LoginByVerifyCode(string i_account, string i_verifyCode)
{
//初始化账号所在的区域地址(-1:获取不到,云端上没这个账号 1:正常 2:无网)
var result = this.InitAccoutRegionInfo(i_account);
if (result == AccountStatu.NotAccount)
{
//账号不存在
return new ResponsePack { Code = HttpMessageEnum.A10010 };
}
if (result == AccountStatu.NotNetWork)
{
//没网,不用往下走
return null;
}
var pra = new { grantType = "verify", account = i_account, verifyCode = i_verifyCode };
//登陆接口特殊,需要快一点访问,设置3秒超时
var revertObj = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("smart-footstone/member/oauth/login", RestSharp.Method.POST, pra, null, null, CheckMode.A不检测, false, 3, true);
if (revertObj != null && revertObj.Code == HttpMessageEnum.A成功)
{
//根据登陆之后,云端返回的数据,刷新Config
this.RefreshConfigDataByLoginData(revertObj);
//初始化登陆账号的信息 -1:无网 1:正常 2:登陆不进去 3:权限变更了
this.InitUserAccoutInfo(true, true);
}
return revertObj;
}
///
/// 用【刷新Token】登陆(成功时,自动刷新Config)
///
public ResponsePack LoginByRefreshToken()
{
var pra = new { grantType = "refresh_token", refreshToken = Config.Instance.RefreshToken };
//登陆接口特殊,需要快一点访问,设置3秒超时
var revertObj = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("smart-footstone/member/oauth/login", RestSharp.Method.POST, pra, null, null, CheckMode.A不检测, false, 3, true);
if (revertObj != null && revertObj.Code == HttpMessageEnum.A成功)
{
//根据登陆之后,云端返回的数据,刷新Config
this.RefreshConfigDataByLoginData(revertObj);
}
return revertObj;
}
///
/// 根据登陆之后,云端返回的数据,刷新Config
///
/// 根据登陆之后,云端返回的数据
private void RefreshConfigDataByLoginData(ResponsePack i_response)
{
//存储数据
var result = Newtonsoft.Json.JsonConvert.DeserializeObject(i_response.Data.ToString());
//标记上一次是不是同一个账号登陆
Config.Instance.TheSameLoginAccount = Config.Instance.Guid == result.UserId;
Config.Instance.Guid = result.UserId;
Config.Instance.LoginDateTime = DateTime.Now;
Config.Instance.Token = result.AccessToken;
Config.Instance.RefreshToken = result.RefreshToken;
Config.Instance.HeaderPrefix = result.HeaderPrefix;
Config.Instance.Save();
}
#endregion
#region ■ 绑定账号___________________________
///
/// 绑定账号,并返回已翻译的错误信息(返回null代表成功)
///
/// 邮箱或者手机
/// 验证码
///
public string BindAccount(string i_account, string i_veriCode)
{
bool isEmail = i_account.Contains("@");
string keyValue = isEmail == true ? "memberMail" : "memberPhone";
var pra = new Dictionary();
pra[keyValue] = i_account;
pra["verifyCode"] = i_veriCode;
var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("smart-footstone/member/memberInfo/bindWithAccount", RestSharp.Method.POST, pra, null, null, CheckMode.A不检测, false, 3, true);
if (result == null)
{
if (isEmail == true)
{
//绑定邮箱失败
return Language.StringByID(R.MyInternationalizationString.uBindEmailFail);
}
else
{
//绑定手机失败
return Language.StringByID(R.MyInternationalizationString.uBindPhoneFail);
}
}
if (result.Code == HttpMessageEnum.A成功)
{
return null;
}
//获取翻译
string errorMsg = HdlMessageLogic.Current.TranslateHttpCode(result.Code);
if (errorMsg == null)
{
if (isEmail == true)
{
//绑定邮箱失败
return Language.StringByID(R.MyInternationalizationString.uBindEmailFail);
}
else
{
//绑定手机失败
return Language.StringByID(R.MyInternationalizationString.uBindPhoneFail);
}
}
return errorMsg;
}
#endregion
#region ■ 修改密码___________________________
///
/// 修改密码
///
/// 旧密码
/// 新密码
///
public bool EditorPassword(string i_oldPsw, string i_newPsw)
{
var pra = new { loginPwd = i_oldPsw, loginNewPwd = i_newPsw };
var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("smart-footstone/member/memberInfo/updatePwd", RestSharp.Method.POST, pra, null, null, CheckMode.A不检测, false, 5, true);
//检测状态码
if (HdlCheckLogic.Current.CheckNetCode(result, ShowNetCodeMode.YES) == false)
{
return false;
}
return true;
}
#endregion
#region ■ 重置密码___________________________
///
/// 重置密码,并返回已翻译的错误信息(返回null代表成功)
///
/// 邮箱或者手机号
/// 新密码
/// 验证码
///
public string ResetPassword(string i_account, string i_newPsw, string i_verifyCode)
{
string accountName = i_account.Contains("@") == true ? "memberEmail" : "memberPhone";
var dicBody = new Dictionary();
dicBody[accountName] = i_account;
dicBody["loginPwd"] = i_newPsw;
dicBody["verifyCode"] = i_verifyCode;
var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("smart-footstone/member/oauth/forgetPwd", RestSharp.Method.POST, dicBody, null, null, CheckMode.A不检测, false, 5, true);
if (result == null)
{
//重置密码失败
return Language.StringByID(R.MyInternationalizationString.uReSetPasswordFail);
}
if (result.Code == HttpMessageEnum.A成功)
{
return null;
}
//获取翻译
string errorMsg = HdlMessageLogic.Current.TranslateHttpCode(result.Code);
if (errorMsg == null)
{
//重置密码失败
return Language.StringByID(R.MyInternationalizationString.uReSetPasswordFail);
}
return errorMsg;
}
#endregion
#region ■ 重新登录___________________________
///
/// 重新登录
///
/// 账号
/// 是否通知云端
public void ReLoginAgain(string account = "", bool noticeDb = true)
{
if (Config.Instance.Home.IsVirtually == true)
{
//如果是虚拟住宅
HdlThreadLogic.Current.RunMain(() =>
{
//设定一个时间
Config.Instance.LoginDateTime = new DateTime(1970, 1, 1);
Config.Instance.Save();
//清空当前住宅id
Config.Instance.HomeId = string.Empty;
//收起左菜单
CommonPage.Instance.CloseLeftMenu();
//关闭全部弹窗
ShowMsgControl.CloseAllMsgDialog();
//关闭所有打开了的界面
HdlFormLogic.Current.CloseAllOpenForm(null, false);
//显示登陆画面
var formLogin = new Login.AccountLoginForm();
Shared.Common.CommonPage.Instance.AddChidren(formLogin);
formLogin.ShowForm(account);
});
return;
}
//关闭所有接收
HdlGatewayReceiveLogic.Current.RemoveAllEvent();
//清除升级列表
HdlFirmwareUpdateResourse.dicUpdateList.Clear();
HdlThreadLogic.Current.RunThread(() =>
{
//检测APP是否能够退出
while (HdlUserCenterResourse.AccountOption.AppCanSignout == false)
{
System.Threading.Thread.Sleep(500);
}
//设定一个时间
Config.Instance.LoginDateTime = new DateTime(1970, 1, 1);
Config.Instance.Save();
//清空当前住宅id
Config.Instance.HomeId = string.Empty;
HdlGatewayLogic.Current.ClearAllRealGatewayConection(false);
//断开远程Mqtt连接
HdlThreadLogic.Current.RunThread(async () =>
{
await ZigBee.Device.ZbGateway.CloseRemoteConnectionOnForce();
}, ShowErrorMode.NO);
HdlThreadLogic.Current.RunMain(() =>
{
//收起左菜单
CommonPage.Instance.CloseLeftMenu();
//关闭所有打开了的界面
HdlFormLogic.Current.CloseAllOpenForm(null, false);
//显示登陆画面
var formLogin = new Login.AccountLoginForm();
Shared.Common.CommonPage.Instance.AddChidren(formLogin);
formLogin.ShowForm(account);
});
if (noticeDb == true)
{
//通知云端,已经退出登陆
this.SignOutClearData();
}
});
}
#endregion
#region ■ 上传头像___________________________
///
/// 上传头像
///
/// 图像的byte数据
/// 失败时是否显示tip消息
///
public bool UpLoadUserIconImage(byte[] byteData, ShowNetCodeMode mode = ShowNetCodeMode.YES)
{
var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("home-wisdom/head/portrait/upload", RestSharp.Method.POST, byteData);
//检测状态码
if (HdlCheckLogic.Current.CheckNetCode(result, mode) == false)
{
return false;
}
return true;
}
#endregion
#region ■ 编辑用户名称_______________________
///
/// 编辑用户昵称
///
/// 用户昵称
/// 失败时是否显示tip消息
///
public bool EditorUserNikeName(string i_nikeName, ShowNetCodeMode mode = ShowNetCodeMode.YES)
{
var pra = new { memberName = i_nikeName };
var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("smart-footstone/member/memberInfo/updateMemberInfo", RestSharp.Method.POST, pra, null, null, CheckMode.A不检测, false, 3, true);
//检测状态码
if (HdlCheckLogic.Current.CheckNetCode(result, mode) == false)
{
return false;
}
return true;
}
#endregion
#region ■ 初始化登陆账号的信息_______________
///
/// 初始化登陆账号的信息(可能的状态码:Sucess NotNetWork)
///
/// 是否从新从本地加载(重新初始化登陆账号的信息,不需要重新加载)
/// 是否尝试访问网络
///
private AccountStatu InitUserAccoutInfo(bool reLoad, bool tryHttp)
{
//预创建用户信息【文件夹】
HdlFileLogic.Current.CreateDirectory(HdlFileNameResourse.AccountDirectory);
HdlFileLogic.Current.CreateDirectory(HdlFileNameResourse.UserPictrueDirectory);
//加载账号配置信息
HdlUserCenterResourse.AccountOption = HdlUserCenterResourse.AccountOption.Load();
if (reLoad == true)
{
//获取本地记录的用户信息
HdlUserCenterResourse.UserInfo = GetUserInformationFromLocation();
}
var netStatu = tryHttp == true ? AccountStatu.Sucess : AccountStatu.NotNetWork;
//只要能联网,就去获取它的账号信息
if (netStatu == AccountStatu.Sucess)
{
//访问接口
var resultData = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("smart-footstone/member/memberInfo/getMemberInfo", RestSharp.Method.POST, null, null, null, CheckMode.A不检测, false, 3, true);
if (resultData != null && resultData.Code == HttpMessageEnum.A成功)
{
var persionData = Newtonsoft.Json.JsonConvert.DeserializeObject(resultData.Data.ToString());
//赋值
HdlUserCenterResourse.UserInfo.NickName = persionData.MemberName;
HdlUserCenterResourse.UserInfo.PhoneAreaCode = persionData.MemberPhonePrefix;
HdlUserCenterResourse.UserInfo.UserPhone = persionData.MemberPhone;
HdlUserCenterResourse.UserInfo.UserEmail = persionData.MemberEmail;
//初始化数字和手势密码
this.InitNumberAndGesturePassword();
}
else
{
netStatu = AccountStatu.NotNetWork;
}
}
HdlUserCenterResourse.UserInfo.Account = Config.Instance.Account;
if (string.IsNullOrEmpty(HdlUserCenterResourse.UserInfo.NickName) == true)
{
//没有昵称的时候,把账号作为昵称
HdlUserCenterResourse.UserInfo.NickName = Config.Instance.Account;
}
if (netStatu != AccountStatu.NotNetWork)
{
//保存缓存
HdlUserCenterResourse.AccountOption.Save();
}
//保存用户的登陆信息到本地
this.SaveUserInformationToLocation();
//后台去下载账号的头像
if (netStatu == AccountStatu.Sucess)
{
HdlThreadLogic.Current.RunThread(() =>
{
//下载头像
var imageData = this.DownLoadAccountPictrue(Config.Instance.Account);
if (imageData != null && imageData.Length > 0)
{
//写入头像内容
HdlFileLogic.Current.SaveByteToFile(HdlFileNameResourse.UserHeadIconFile, imageData);
}
}, ShowErrorMode.NO);
}
return netStatu;
}
///
/// 重新初始化登陆账号的信息(网络变更的时候调用 可能的状态码:Sucess NotNetWork AuthorityChangd TokenTimeOunt)
///
///
public AccountStatu ReInitUserAccoutInfo()
{
if (Config.Instance.Home.Id == string.Empty)
{
//如果处在登陆界面时
return AccountStatu.NotNetWork;
}
//重新刷新Token
var respone = this.LoginByRefreshToken();
if (respone == null) { return AccountStatu.NotNetWork; }
if (respone.Code != HttpMessageEnum.A成功)
{
HdlThreadLogic.Current.RunMain(() =>
{
//登陆Token已经过期,请重新登陆
string msg = Language.StringByID(R.MyInternationalizationString.uLoginTokenIsTimeOutPleaseLoginAgain);
HdlMessageLogic.Current.ShowMassage(ShowMsgType.Tip, msg);
this.ReLoginAgain(HdlUserCenterResourse.UserInfo.Account, false);
});
return AccountStatu.TokenTimeOunt;
}
//重新获取住宅列表
var listHouse = HdlResidenceLogic.Current.GetHomeListsFromDb(ShowNetCodeMode.No);
if (listHouse == null)
{
//断网,获取不到住宅
return AccountStatu.NotNetWork;
}
//检测当前这个住宅还在吗
bool houseIsEsixt = false;
foreach (var houseInfo in listHouse)
{
//刷新住宅信息
HdlResidenceLogic.Current.RefreshResidenceMemory(houseInfo);
if (houseInfo.Id == Config.Instance.Home.Id)
{
houseIsEsixt = true;
}
}
if (houseIsEsixt == false)
{
//当前这个住宅不见了,让他重新登陆
return AccountStatu.TokenTimeOunt;
}
//刷新账号的权限(可能的状态码:Sucess AuthorityChangd)
var result22 = this.RefreshAccountAuthority();
if (result22 == AccountStatu.AuthorityChangd)
{
HdlThreadLogic.Current.RunMain(() =>
{
//您的权限已经变更,请重新登陆
string msg = Language.StringByID(R.MyInternationalizationString.uYouAccessHadChangedPleaseTakeToAdmin);
HdlMessageLogic.Current.ShowMassage(ShowMsgType.Tip, msg);
this.ReLoginAgain(HdlUserCenterResourse.UserInfo.Account, false);
});
return result22;
}
//重新初始化主人的token(管理员专用)
var success = this.InitMasterToken();
if (success == false)
{
return AccountStatu.NotNetWork;
}
//重新初始化账号信息
var result = InitUserAccoutInfo(false, true);
if (result == AccountStatu.Sucess)
{
//如果有网关没有绑定,则去绑定网关
HdlGatewayLogic.Current.ResetComandToBindBackupGateway();
//同步云端的网关id,如果本地拥有云端不存在的id,则表示应该被换绑了,直接删除
HdlGatewayLogic.Current.SynchronizeDbGateway();
}
return result;
}
///
/// 刷新账号的权限(可能的状态码:Sucess AuthorityChangd)
///
///
public AccountStatu RefreshAccountAuthority()
{
//取当前旧值
int oldAuthorityNo = HdlUserCenterResourse.ResidenceOption.OldAuthorityNo;
if (Config.Instance.Home.IsOtherShare == false)
{
//身份:管理员
HdlUserCenterResourse.ResidenceOption.AuthorityNo = 1;
HdlUserCenterResourse.ResidenceOption.AuthorityText = Language.StringByID(R.MyInternationalizationString.Administrator);
}
else if (Config.Instance.Home.AccountType == 1)
{
//身份:成员(拥有管理员权限)
HdlUserCenterResourse.ResidenceOption.AuthorityNo = 2;
HdlUserCenterResourse.ResidenceOption.AuthorityText = Language.StringByID(R.MyInternationalizationString.uMemberHadActionAuthority);
}
else
{
//身份:成员
HdlUserCenterResourse.ResidenceOption.AuthorityNo = 3;
HdlUserCenterResourse.ResidenceOption.AuthorityText = Language.StringByID(R.MyInternationalizationString.uMember);
}
//保存
HdlUserCenterResourse.ResidenceOption.Save();
//然后值盖过去
HdlUserCenterResourse.ResidenceOption.OldAuthorityNo = HdlUserCenterResourse.ResidenceOption.AuthorityNo;
//UserInfo.OldAuthorityNo==0代表本地还没有生成文件,这个时候不需要处理
if (HdlUserCenterResourse.ResidenceOption.AuthorityNo != oldAuthorityNo
&& oldAuthorityNo != 0)
{
//切换网络时,需要对这个值进行踢人下线
return AccountStatu.AuthorityChangd;
}
return AccountStatu.Sucess;
}
///
/// 初始化账号的Url区域地址(可能状态码:Sucess NotAccount NotNetWork)
///
///
private AccountStatu InitAccoutRegionInfo(string i_account)
{
var regionUrl = this.GetAccoutRegionInfo(i_account);
if (regionUrl == null)
{
return AccountStatu.NotNetWork;
}
if (regionUrl == string.Empty)
{
return AccountStatu.NotAccount;
}
//变更地址
HdlHttpLogic.Current.RequestHttpsHost = regionUrl;
return AccountStatu.Sucess;
}
///
/// 获取账号的区域信息(null:无法联网 空字符串:账号不存在 非空:正常获取)
///
/// 手机或者邮箱
///
private string GetAccoutRegionInfo(string i_account)
{
var pra = new { account = i_account };
var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("smart-footstone/region/regionByAccount", RestSharp.Method.POST, pra, null, null, CheckMode.A不检测, false, 3, true);
if (result == null)
{
return null;
}
if (result.Code != HttpMessageEnum.A成功)
{
return string.Empty;
}
var info = Newtonsoft.Json.JsonConvert.DeserializeObject(result.Data.ToString());
return info.RegionUrl;
}
///
/// 保存用户的登陆信息到本地
///
private void SaveUserInformationToLocation()
{
//写入内容
HdlFileLogic.Current.SaveFileContent(HdlFileNameResourse.UserInfoFile, HdlUserCenterResourse.UserInfo);
string iconFile = HdlFileNameResourse.UserHeadIconFile;
if (System.IO.File.Exists(iconFile) == false)
{
//搞一下主人的默认头像
string defultFile = IO.FileUtils.GetImageFilePath("Center/Admin.png");
if (defultFile == string.Empty)
{
return;
}
//复制过去
System.IO.File.Copy(defultFile, iconFile);
}
}
///
/// 从本地获取用户的登陆信息
///
///
private UserInformation GetUserInformationFromLocation()
{
var value = HdlFileLogic.Current.ReadFileTextContent(HdlFileNameResourse.UserInfoFile);
if (value == null)
{
return new UserInformation();
}
var info = Newtonsoft.Json.JsonConvert.DeserializeObject(value);
return info;
}
///
/// 账号的区域地址信息
///
private class AccoutRegionInfo
{
///
/// 账号的区域地址(如果为空,代表账号不存在)
///
public string RegionUrl = string.Empty;
}
#endregion
#region ■ 初始化主人的Token__________________
///
/// 初始化主人的token
///
public bool InitMasterToken()
{
if (HdlUserCenterResourse.ResidenceOption.AuthorityNo != 2)
{
//此接口只能管理员调用
return true;
}
var pra = new { homeId = Config.Instance.Home.Id };
var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("home-wisdom/app/child/account/debug", RestSharp.Method.POST, pra);
if (result == null || result.Code != HttpMessageEnum.A成功)
{
return false;
}
var data = Newtonsoft.Json.JsonConvert.DeserializeObject(result.Data.ToString());
//记录起这两个token
Config.Instance.MasterToken = data.AccessToken;
return true;
}
#endregion
#region ■ 初始化数字和手势密码_______________
///
/// 初始化数字和手势密码
///
///
private bool InitNumberAndGesturePassword()
{
//读取云端数据
var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("smart-footstone/member/memberInfo/getLockCode", RestSharp.Method.POST, null, null, null, CheckMode.A不检测, false, 3, true);
if (result != null)
{
if (result.Code == HttpMessageEnum.A成功)
{
var info = Newtonsoft.Json.JsonConvert.DeserializeObject(result.Data.ToString());
//手势密码
HdlUserCenterResourse.AccountOption.GestureAuthentication = info.GestureCode;
//密码验证
HdlUserCenterResourse.AccountOption.PswAuthentication = info.DigitCode;
return true;
}
//未配置 则清空
else if (result.Code == HttpMessageEnum.A11005)
{
//手势密码
HdlUserCenterResourse.AccountOption.GestureAuthentication = string.Empty;
//密码验证
HdlUserCenterResourse.AccountOption.PswAuthentication = string.Empty;
}
}
return false;
}
///
/// 编辑数字和手势密码
///
/// 数字密码,如果不更新,请置为null
/// 手势密码,如果不更新,请置为null
///
public bool EditorNumberAndGesturePassword(string i_numPsw, string i_gesturePsw)
{
var pra = new Dictionary();
if (i_numPsw != null) { pra["digitCode"] = i_numPsw; }
if (i_gesturePsw != null) { pra["gestureCode"] = i_gesturePsw; }
var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("smart-footstone/member/memberInfo/setLockCode", RestSharp.Method.POST, pra, null, null, CheckMode.A不检测, false, 3, true);
if (result != null && result.Code == HttpMessageEnum.A成功)
{
return true;
}
return false;
}
///
/// 数字和手势密码
///
private class NumberAndGesturePasswordInfo
{
///
/// 手势密码
///
public string GestureCode = string.Empty;
///
/// 数字
///
public string DigitCode = string.Empty;
}
#endregion
#region ■ 下载指定账号的头像_________________
///
/// 下载指定账号的头像
///
/// 邮箱或者手机号
///
public byte[] DownLoadAccountPictrue(string i_account)
{
var pra = new { account = i_account };
var result = HdlHttpLogic.Current.RequestByteFromZigbeeHttps("home-wisdom/app/head/portrait/downWithAccount", RestSharp.Method.POST, pra);
if (result != null && result.Length == 0)
{
result = null;
}
return result;
}
#endregion
#region ■ 一般方法___________________________
///
/// 退出登录时调用,清除推送数据
///
public void SignOutClearData()
{
//通知云端,已经退出登陆
var pra = new { pushId = Config.Instance.PushId };
var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("smart-footstone/app/push-information/delete", RestSharp.Method.POST, pra);
if (result == null)
{
//调试:记录极光ID
HdlLogLogic.Current.WriteOtherText(HdlFileNameResourse.JiguangFile, "SignOut:" + Config.Instance.RegistrationID + " fail,receive obj is null", false, true);
}
else
{
//调试:记录极光ID
HdlLogLogic.Current.WriteOtherText(HdlFileNameResourse.JiguangFile, "SignOut:" + Config.Instance.RegistrationID + " result:" + result.Code, false, true);
}
}
///
/// 登录成功后上报设备id等相关信息给后端
///
/// 返回状态码
public string PushDeviceIdToDB()
{
try
{
string deviceAlias;
string deviceType;
#if iOS
deviceAlias = UIKit.UIDevice.CurrentDevice.Name;
deviceType = "IOS";
#elif Android
deviceAlias = Android.OS.Build.Manufacturer;
deviceType = "Android";
#endif
var pra = new { deviceName = deviceAlias, deviceType = deviceType, produce = false, pushToken = Config.Instance.RegistrationID, software = "Evoyo" };
var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("smart-footstone/app/push-information/add", RestSharp.Method.POST, pra);
if (result == null)
{
//调试:记录极光ID
HdlLogLogic.Current.WriteOtherText(HdlFileNameResourse.JiguangFile, "send:" + Config.Instance.RegistrationID + " fail,receive obj is null", false, true);
return null;
}
//调试:记录极光ID
HdlLogLogic.Current.WriteOtherText(HdlFileNameResourse.JiguangFile, "send:" + Config.Instance.RegistrationID + " result:" + result.Code, false, true);
if (result.Code == HttpMessageEnum.A成功)
{
Config.Instance.PushId = result.Data.ToString();
Config.Instance.Save();
}
return result.Code;
}
catch
{
return null;
}
}
#endregion
#region ■ 结构体_____________________________
///
/// 个人信息
///
private class PersionInfoResult
{
///
/// 昵称
///
public string MemberName = string.Empty;
///
/// 邮箱
///
public string MemberEmail = string.Empty;
///
/// 手机
///
public string MemberPhone = string.Empty;
///
/// 手机的地区码
///
public string MemberPhonePrefix = string.Empty;
}
///
/// 登陆结果
///
private class UserLoginRes
{
///
/// 账号
///
public string Account = string.Empty;
///
/// 令牌类型,没啥用
///
public string TokenType = string.Empty;
///
/// 这个是新接口的Guid,也是账号id
///
public string UserId = string.Empty;
///
/// 添加到Token头部的东西(不要理它,只给底层使用)
///
public string HeaderPrefix = string.Empty;
///
/// Token(不用记录什么有效期,如果登陆失败,就拿RefreshToken去刷新)
///
public string AccessToken = string.Empty;
///
/// 刷新accessToken用的token(不用记录什么有效期,如果刷新失败,就踢人即可)
///
public string RefreshToken = string.Empty;
}
#endregion
}
}