using System;
using Shared.Common;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Text;
namespace Shared.Phone
{
///
/// 个人中心逻辑类
///
public class HdlUserCenterLogic
{
#region ■ 变量声明___________________________
///
/// 个人中心逻辑类
///
private static HdlUserCenterLogic m_Current = null;
///
/// 个人中心逻辑类
///
public static HdlUserCenterLogic Current
{
get
{
if (m_Current == null)
{
m_Current = new HdlUserCenterLogic();
}
return m_Current;
}
}
#endregion
#region ■ 刷新本地缓存_______________________
///
/// 刷新本地所有缓存(目前此方法只提供给恢复备份数据使用)
///
public void RefreshAllMemory()
{
//刷新住宅对象
RefreshHomeObject();
//根据模板文件,恢复数据
HdlTemplateCommonLogic.Current.RecoverDataByTemplateBinFile();
//强制生成设备和网关文件
HdlTemplateCommonLogic.Current.CreatDeviceAndGatewayFileFromMemoryByForce();
//刷新本地网关文件
HdlGatewayLogic.Current.ReFreshByLocal();
//刷新本地设备
HdlDeviceCommonLogic.Current.ReFreshByLocal();
//需优先于刷新房间,同步云端的网关id,如果本地拥有云端不存在的id,则表示应该被换绑了,直接删除
HdlGatewayLogic.Current.SynchronizeDbGateway();
//从本地重新加载全部的房间
HdlRoomLogic.Current.RefreshAllRoomByLocation();
//断开远程Mqtt连接,重新连接
HdlThreadLogic.Current.RunThread(async () =>
{
HdlGatewayLogic.Current.ClearAllRealGatewayConection(true);
await ZigBee.Device.ZbGateway.CloseRemoteConnectionOnForce();
}, ShowErrorMode.NO);
}
///
/// 刷新住宅对象
///
public void RefreshHomeObject()
{
var home = HdlResidenceLogic.Current.GetHouseByHouseId(Config.Instance.Home.Id);
//刷新楼层
Config.Instance.Home.FloorDics = home.FloorDics;
Config.Instance.Home.CurrentFloorId = string.Empty;
if (Config.Instance.Home.TemplateMode == -1)
{
Config.Instance.Home.TemplateMode = home.TemplateMode;
if (Config.Instance.Home.TemplateMode == -1)
{
//默认初始值
Config.Instance.Home.TemplateMode = 1;
}
}
Config.Instance.Home.Save(false);
//主页需要重新刷新
UserView.UserPage.Instance.RefreshAllForm = true;
}
#endregion
#region ■ 刷新个人中心的内存及线程___________
///
/// 刷新个人中心的内存及线程(仅限切换住宅时调用)
///
/// 是否是登陆操作
///
public bool InitUserCenterMenmoryAndThread(bool i_isLogin)
{
//调用这个方法,都需要重新刷新主页
UserView.UserPage.Instance.RefreshAllForm = true;
//添加网络状态监听
HdlWifiLogic.Current.StartListenNetWork();
//如果是虚拟住宅
if (Config.Instance.Home.IsVirtually == true)
{
//初始化虚拟住宅的个人中心的数据(切换住宅使用)
InitUserCenterMenmoryByVirtualHome();
return true;
}
//APP缓存加载开始
HdlUserCenterResourse.AccountOption.AppCanSignout = false;
//是否有网络,初始值为:有
int hadNet = 1;
if (i_isLogin == true)
{
//登陆的时候,获取云端住宅列表(0:当前没有网络的情况下加载本地住宅 1:通过联网加载及校验本地住宅)
hadNet = HdlResidenceLogic.Current.GetHomeListsFromDbOnLogin();
}
//清空所有成员缓存
this.ClearAllMemberMemory();
//加载住宅配置信息
HdlUserCenterResourse.ResidenceOption = HdlUserCenterResourse.ResidenceOption.Load();
//预创建个人中心全部的文件夹
HdlFileLogic.Current.CreatAllUserCenterDirectory();
//检测当前账号的权限的合法性
this.CheckNowAuthority();
//如果有网络的话
if (hadNet == 1)
{
//初始化主人的Token(管理员专用,不用管失败还是成功,出问题,底层接口会踢到登陆界面)
HdlAccountLogic.Current.InitMasterToken();
//重新发送命令去绑定断网情况下备份的网关
HdlGatewayLogic.Current.ResetComandToBindBackupGateway();
//读取隐匿配置
HdlBackupLogic.Current.LoadHideOption();
//调试:强制开启后台调试App功能
if (HdlUserCenterResourse.HideOption.StartDebugApp == 1)
{
HdlThreadLogic.Current.RunMain(() =>
{
var form = new UserCenter.HideOption.HideOptionMainForm();
form.AddForm();
});
ProgressBar.Close(true);
return false;
}
}
//关闭所有接收
HdlGatewayReceiveLogic.Current.RemoveAllEvent();
//刷新安防上报信息
HdlAlarmsLogic.Current.RefreshAlarmInfo();
//同步数据(二次调用没关系)
int result = -1;
if (hadNet == 1)
{
result = HdlBackupLogic.Current.SynchronizeDbAutoBackupData();
}
//初始化本地的网关信息
HdlGatewayLogic.Current.ReFreshByLocal();
//初始化本地的设备信息
HdlDeviceCommonLogic.Current.ReFreshByLocal();
//初始化房间(郭雪城那边不做处理,需要这里特殊执行一步)
HdlRoomLogic.Current.RefreshAllRoomByLocation();
if (hadNet == 1)
{
//同步云端的网关id,如果本地拥有云端不存在的id,则表示应该被换绑了,直接删除
//HdlGatewayLogic.Current.SynchronizeDbGateway();
}
//断开远程Mqtt连接,重新连接
HdlThreadLogic.Current.RunThread(async () =>
{
HdlGatewayLogic.Current.ClearAllRealGatewayConection(true);
await ZigBee.Device.ZbGateway.CloseRemoteConnectionOnForce();
}, ShowErrorMode.NO);
//刷新APP前一次选择的网关ID(可以反复调用,需要在网关初始化完了之后才能调用)
HdlGatewayLogic.Current.RefreshAppOldSelectGatewayId();
//0:已经同步过,不需要同步,这个时候需要提示备份
if (result == 0 && i_isLogin == true)
{
//开启自动备份
HdlBackupLogic.Current.ShowAutoBackupPromptedForm();
}
//显示引导界面
HdlFormLogic.Current.ShowGuideForm(result);
//APP缓存加载完成
HdlUserCenterResourse.AccountOption.AppCanSignout = true;
if (Shared.Phone.Device.Logic.Send.If_Exist == "1")
{
//以本地状态为主打开GPS服务
Application.StartGPSLocationService();
}
return true;
}
///
/// 初始化虚拟住宅的个人中心的数据(切换住宅使用)
///
private void InitUserCenterMenmoryByVirtualHome()
{
//清空所有成员缓存
ClearAllMemberMemory();
//预创建个人中心全部的文件夹
HdlFileLogic.Current.CreatAllUserCenterDirectory();
//关闭所有接收
HdlGatewayReceiveLogic.Current.RemoveAllEvent();
//初始化本地的网关信息
HdlGatewayLogic.Current.ReFreshByLocal();
//初始化本地的设备信息
HdlDeviceCommonLogic.Current.ReFreshByLocal();
//初始化房间(郭雪城那边不做处理,需要这里特殊执行一步)
HdlRoomLogic.Current.RefreshAllRoomByLocation();
//刷新左边刷新房间视图列表
HdlRoomLogic.Current.RefreshRoomListView();
}
///
/// 清空所有成员缓存
///
private void ClearAllMemberMemory()
{
//消息记录重新读取及检测
HdlControlResourse.ReadMessageAgain = true;
HdlControlResourse.HadNewMessage = false;
HdlThreadLogic.Current.RunMain(() =>
{
for (int i = 0; i < HdlControlResourse.listMessageManaContr.Count; i++)
{
//显示角标特效
HdlControlResourse.listMessageManaContr[i].IsSelected = false;
}
});
//切换住宅清除之前逻辑缓存数据;
Common.Logic.LogicList.Clear();
Common.Logic.LockLogicList.Clear();
Common.Logic.SoneLogicList.Clear();
}
///
/// 检测当前账号的权限的合法性
///
private void CheckNowAuthority()
{
var result = HdlAccountLogic.Current.RefreshAccountAuthority();
if (result == AccountStatu.AuthorityChangd)
{
//如果登陆的账号的权限和上一次的不一样,则删除本地这个住宅全部的文件,从头再来
string dirPath = Config.Instance.FullPath;
if (System.IO.Directory.Exists(dirPath) == true)
{
//同步数据的判断文件(以防万一删除整个文件夹失败的时候,这个文件被删的话,应该没什么大问题)
HdlFileLogic.Current.DeleteFile(HdlFileNameResourse.AutoDownLoadBackupCheckFile);
//如果本地已经拥有了这个文件,则说明不是新手机,不再自动还原
HdlFileLogic.Current.DeleteDirectory(dirPath);
//创建住宅文件夹
Global.CreateHomeDirectory(Config.Instance.HomeId);
//预创建个人中心全部的文件夹
HdlFileLogic.Current.CreatAllUserCenterDirectory();
}
}
}
#endregion
}
}