using System;
using System.Collections.Generic;
using HDL_ON;
using HDL_ON.DAL;
using HDL_ON.DAL.Server;
using HDL_ON.Entity;
using Shared;
namespace HDL_ON.Common
{
public class ApiUtlis
{
public ApiUtlis()
{
}
static ApiUtlis apiUtlis;
public static ApiUtlis Ins
{
get
{
if (apiUtlis == null)
{
apiUtlis = new ApiUtlis();
}
return apiUtlis;
}
}
HttpServerRequest httpRequest;
public HttpServerRequest HttpRequest
{
get
{
if (httpRequest == null)
{
httpRequest = new HttpServerRequest();
}
return httpRequest;
}
}
///
/// 校验网关是否在线
///
public bool GatewayOnlineVerification()
{
bool result = DB_ResidenceData.Instance.HomeGateway.gatewayStatus;
DriverLayer.Control.Ins.GatewayOnline_Cloud = result;
if (!result)
{
}
return result;
}
public bool DownloadDataComplete = true;
///
/// 下载数据
///
public void DownloadData()
{
if (MainPage.InternetStatus == 0)
return;
//线程开始时间
var endTime = DateTime.Now.AddSeconds(5);
MainPage.Log($"开始同步云端数据");
DownloadDataComplete = false;
var waitPage = new Loading();
MainPage.BaseView.AddChidren(waitPage);
waitPage.Start(Language.StringByID(StringId.PleaseWait));
string code = StateCode.SUCCESS;
var downloadDataThread = new System.Threading.Thread(() =>
{
MainPage.Log($"进入读取云端数据线程");
//===================刷新Token=======================
code = Ins.HttpRequest.RefreshToken();
if (code != StateCode.SUCCESS)
{
MainPage.Log($"刷新token失败");
return;
}
endTime = DateTime.Now.AddSeconds(5);
MainPage.Log($"刷新token成功");
//===================刷新住宅信息=======================
code = Ins.HttpRequest.GetHomePager();
if (code != StateCode.SUCCESS)
{
MainPage.Log($"刷新住宅信息失败");
return;
}
endTime = DateTime.Now.AddSeconds(5);
MainPage.Log($"刷新住宅信息成功");
//===================刷新个人信息=======================
code = Ins.HttpRequest.GetUserInfo();
if (code != StateCode.SUCCESS)
{
MainPage.Log($"刷新个人信息失败");
return;
}
endTime = DateTime.Now.AddSeconds(5);
MainPage.Log($"刷新个人信息成功");
try
{
//===================房间=======================
var roomResult = Ins.HttpRequest.GetRoomList();
if (roomResult.Code == StateCode.SUCCESS)
{
endTime = DateTime.Now.AddSeconds(100);
MainPage.Log($"读取房间信息成功");
var revData = Newtonsoft.Json.JsonConvert.DeserializeObject(roomResult.Data.ToString());
if (revData == null)
{
revData = new SpatialApiPack();
}
{
SpatialInfo.CurrentSpatial.UpdateSpatialList(revData.list);
}
endTime = DateTime.Now.AddSeconds(5);
}
else
{
MainPage.Log($"读取房间数据失败:Code:{roomResult.Code}; msg:{roomResult.message}");
}
//===================设备=======================
var deviceResult = Ins.HttpRequest.GetDeviceList();
if (deviceResult.Code == StateCode.SUCCESS)
{
endTime = DateTime.Now.AddSeconds(100);
MainPage.Log($"读取设备信息成功");
var deviceList = Newtonsoft.Json.JsonConvert.DeserializeObject(deviceResult.Data.ToString());
if (deviceList == null)
{
deviceList = new DevcieApiPack();
}
string delFile = "";
if (FunctionList.List.GetDeviceFunctionList().Count > 0)
{
for (int i = 0; i < FunctionList.List.GetDeviceFunctionList().Count;)
{
var localFunction = FunctionList.List.GetDeviceFunctionList()[i];
if (localFunction.Spk_Prefix == FunctionCategory.Music || string.IsNullOrEmpty(localFunction.Spk_Prefix))
{
i++;
continue;
}
var newFunction = deviceList.list.Find((obj) => obj.deviceId == localFunction.deviceId);
if (delFile == localFunction.savePath)
{
i++;
continue;
}
delFile = localFunction.savePath;
FunctionList.List.DeleteFunction(localFunction);
}
}
//处理剩下的新增功能
foreach (var newFunction in deviceList.list)
{
MainPage.Log(newFunction.savePath);
newFunction.SaveFunctionFile();
FunctionList.List.IniFunctionList(newFunction.savePath);
}
endTime = DateTime.Now.AddSeconds(5);
}
else
{
MainPage.Log($"读取云端设备数据失败:Code:{deviceResult.Code}; Msg:{deviceResult.message}");
}
//===================场景==========================
var pack = Ins.HttpRequest.GetSceneList();
if (pack.Code == StateCode.SUCCESS)
{
endTime = DateTime.Now.AddSeconds(100);
MainPage.Log($"读取场景数据成功");
var sceneList = Newtonsoft.Json.JsonConvert.DeserializeObject>(pack.Data.ToString());
if (sceneList == null)
{
sceneList = new List();
}
for (int i = 0; i < FunctionList.List.scenes.Count;)
{
var localScene = FunctionList.List.scenes[i];
if (localScene == null)
{
FunctionList.List.scenes.Remove(localScene);
continue;
}
var newScene = sceneList.Find((obj) => obj.userSceneId == localScene.userSceneId);
if (newScene == null)//如果云端最新数据没有该条数据,则本地需要删掉该数据记录
{
FunctionList.List.DeleteScene(localScene, false);
}
else
{
i++;
if (localScene.modifyTime != newScene.modifyTime)
{
localScene.name = newScene.name;
localScene.collect = newScene.collect;
localScene.modifyTime = newScene.modifyTime;
localScene.roomIds = newScene.roomIds;
localScene.image = newScene.image;
localScene.SaveSceneFile();
}
sceneList.Remove(newScene);//操作完的数据清理掉,剩下的就是新增的功能
}
}
//处理剩下的新增功能
foreach (var tempScene in sceneList)
{
tempScene.SaveSceneFile();
FunctionList.List.scenes.Add(tempScene);
}
//如果是一端口需要提前下载场景数据,否则控制不了一端口场景
if (DB_ResidenceData.Instance.GatewayType == 0)
{
var sceneIds = new List();
foreach (var tempScene in FunctionList.List.scenes)
{
sceneIds.Add(tempScene.userSceneId);
}
var packInfo = HttpRequest.GetSceneListInfo(sceneIds);
if (packInfo.Code == StateCode.SUCCESS)
{
var serverTempList = Newtonsoft.Json.JsonConvert.DeserializeObject>(packInfo.Data.ToString());
foreach (var localScene in FunctionList.List.scenes)
{
var serverTemp = serverTempList.Find((obj) => obj.userSceneId == localScene.userSceneId);
if (serverTemp != null)
{
localScene.functions = serverTemp.functions;
localScene.SaveSceneFile();
}
}
}
else
{
IMessageCommon.Current.ShowErrorInfoAlter(packInfo.Code);
}
}
endTime = DateTime.Now.AddSeconds(5);
}
else
{
MainPage.Log($"读取云端场景数据失败:Code:{pack.Code}; Msg:{pack.message}");
}
//===================读取安防列表==========================
GetSecurityList();
//===================读取逻辑列表==========================
UI.UI2.Intelligence.Automation.MainView.GetLogicList();
//===================读取可视对讲数据==========================
var flVideoInfo = HttpRequest.CheckFlVideo();
if(flVideoInfo.Code == StateCode.SUCCESS)
{
FunctionList.List.videoIntercom = Newtonsoft.Json.JsonConvert.DeserializeObject(flVideoInfo.Data.ToString());
}
}
catch (Exception ex)
{
MainPage.Log($"数据初始化失败:{ex.Message}");
}
finally
{
Application.RunOnMainThread(() =>
{
MainPage.Log($"结束读取云端数据线程");
endTime = DateTime.MinValue;
DownloadDataComplete = true;
waitPage.Hide();
waitPage.RemoveFromParent();
});
//不考虑网关情况,直接订阅
DAL.Mqtt.MqttClient.InitState();
FunctionList.List.Read3tyFunctionStatus();
}
});
downloadDataThread.IsBackground = true;
downloadDataThread.Priority = System.Threading.ThreadPriority.Highest;
downloadDataThread.Start();
//网络卡顿,终止下载线程
new System.Threading.Thread(() =>
{
try
{
while (endTime > DateTime.Now)
{
if (DownloadDataComplete)
{
break;
}
System.Threading.Thread.Sleep(100);
}
if (!DownloadDataComplete)
{
//downloadDataThread.Abort();
}
DownloadDataComplete = true;
Application.RunOnMainThread(() =>
{
waitPage.Hide();
waitPage.RemoveFromParent();
});
//初始化数据
//SpatialInfo.CurrentSpatial.Clear();
}
catch { }
finally
{
if (DB_ResidenceData.Instance.CurrentRegion != null)
{
#region 读取本地数据
//读取音乐信息
UI.Music.A31MusicModel.ReadMusicStates();
//搜索网关
DriverLayer.Control.Ins.SearchLoaclGateway();
#endregion
}
}
})
{ IsBackground = true }.Start();
}
///
/// 获取功能信息
///
public void GetFunctionInfo(string functionId)
{
var deviceResult = Ins.HttpRequest.GetDeviceInfo(functionId);
if (deviceResult.Code == StateCode.SUCCESS)
{
MainPage.Log($"读取设备信息成功");
var packList = Newtonsoft.Json.JsonConvert.DeserializeObject(deviceResult.Data.ToString());
foreach(var function in packList.list)
{
function.SaveFunctionFile();
FunctionList.List.IniFunctionList(function.savePath,true);
}
}
}
///
/// 获取安防列表
///
public void GetSecurityList()
{
var pack = Ins.HttpRequest.GetSecurityList();
if (pack.Code == StateCode.SUCCESS)
{
var packList = Newtonsoft.Json.JsonConvert.DeserializeObject>(pack.Data.ToString());
var sidList = new List();
foreach (var function in packList)
{
sidList.Add(function.sid);
}
var infoListPack = Ins.httpRequest.GetSecurityInfo(sidList, new List());
var infoList = Newtonsoft.Json.JsonConvert.DeserializeObject>(infoListPack.Data.ToString());
foreach (var function in infoList)
{
function.SaveFile();
FunctionList.List.IniFunctionList(function.savePath, true);
}
}
else
{
MainPage.Log($"读取安防列表失败:Code:{pack.Code}; Msg:{pack.message}");
}
}
}
}