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;
|
}
|
}
|
/// <summary>
|
/// 校验网关是否在线
|
/// </summary>
|
public bool GatewayOnlineVerification()
|
{
|
bool result = DB_ResidenceData.Instance.HomeGateway.gatewayStatus;
|
DriverLayer.Control.Ins.GatewayOnline_Cloud = result;
|
if (!result)
|
{
|
|
}
|
|
return result;
|
}
|
|
public bool DownloadDataComplete = true;
|
/// <summary>
|
/// 下载数据
|
/// </summary>
|
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($"刷新个人信息成功");
|
|
//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<SpatialApiPack>(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<DevcieApiPack>(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<List<Scene>>(pack.Data.ToString());
|
if (sceneList == null)
|
{
|
sceneList = new List<Scene>();
|
}
|
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<string>();
|
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<List<Scene>>(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();
|
}
|
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();
|
}
|
|
/// <summary>
|
/// 获取功能信息
|
/// </summary>
|
public void GetFunctionInfo(string functionId)
|
{
|
var deviceResult = Ins.HttpRequest.GetDeviceInfo(functionId);
|
if (deviceResult.Code == StateCode.SUCCESS)
|
{
|
MainPage.Log($"读取设备信息成功");
|
var packList = Newtonsoft.Json.JsonConvert.DeserializeObject<DevcieApiPack>(deviceResult.Data.ToString());
|
|
foreach(var function in packList.list)
|
{
|
function.SaveFunctionFile();
|
FunctionList.List.IniFunctionList(function.savePath,true);
|
}
|
}
|
}
|
}
|
}
|