using System;
using System.Collections.Generic;
using HDL_ON;
using HDL_ON.DAL;
using HDL_ON.DAL.Server;
using HDL_ON.Entity;
using HDL_ON.UI.UI2.FuntionControlView.Video;
using Newtonsoft.Json;
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 || MainPage.NoLoginMode)
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($"刷新个人信息成功");
//int count = 0;
//while (count < 10)
//{
// if (DB_ResidenceData.Instance.CheckWhetherGatewayIdIsNull())
// {
// System.Threading.Thread.Sleep(200);
// }
// else
// {
// break;
// }
// count++;
//}
//if (DB_ResidenceData.Instance.CheckWhetherGatewayIdIsNull())
//{
// return;
//}
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();
}
FunctionList.List.scenes.Clear();
//处理剩下的新增功能
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}");
}
//===================读取逻辑列表==========================
UI.UI2.Intelligence.Automation.MainView.GetLogicList();
//===================读取可视对讲数据==========================
//判断是否有可视对讲数据,有则显示可视对讲icon
//var flVideoInfo = HttpRequest.CheckFlVideo();
//if(flVideoInfo.Code == StateCode.SUCCESS)
//{
// FunctionList.List.videoIntercom1111 = Newtonsoft.Json.JsonConvert.DeserializeObject(flVideoInfo.Data.ToString());
//}
//======================获取可视对讲设备列表====================
var videoInfo= VideoSend.GetVideoInfoList();
if (videoInfo.Code == StateCode.SUCCESS)
{
string videoList = videoInfo.Data.ToString();
FunctionList.List.videoIntercom = JsonConvert.DeserializeObject>(videoList);
foreach (var video in FunctionList.List.videoIntercom)
{
if (video.interphoneType == "IMOUVISIAL")
{
UI.UI2.PersonalCenter.PirDevice.PirSend.LcSubAccessToken = video.subAccountToken;
}
}
}
}
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}");
}
}
}
}