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;
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($"刷新个人信息成功");
//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();
}
if (FunctionList.List.GetDeviceFunctionList().Count > 0)
{
for (int i = 0; i < FunctionList.List.GetDeviceFunctionList().Count;)
{
var localFunction = FunctionList.List.GetDeviceFunctionList()[i];
if (localFunction.functionCategory == FunctionCategory.Music)
{
i++;
continue;
}
var newFunction = deviceList.list.Find((obj) => obj.deviceId == localFunction.deviceId);
if (newFunction == null)//如果云端最新数据没有该条数据,则本地需要删掉该数据记录
{
FunctionList.List.DeleteFunction(localFunction);
}
else
{
MainPage.Log($"deviceType:{localFunction.spk} local:{localFunction.modifyTime} server:{newFunction.modifyTime}");
i++;
if (localFunction.modifyTime != newFunction.modifyTime)
{
//可优化
localFunction.name = newFunction.name;
localFunction.collect = newFunction.collect;
localFunction.modifyTime = newFunction.modifyTime;
localFunction.roomIds = newFunction.roomIds;
localFunction.bus = newFunction.bus;
localFunction.SaveFunctionFile();
}
deviceList.list.Remove(newFunction);//操作完的数据清理掉,剩下的就是新增的功能
}
}
}
//处理剩下的新增功能
foreach (var newFunction in deviceList.list)
{
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}");
}
//===================读取逻辑列表==========================
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();
});
}
});
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
{
#region 读取本地数据
//读取音乐信息
UI.Music.A31MusicModel.ReadMusicStates();
//搜索网关
DriverLayer.Control.Ins.SearchLoaclGateway();
#endregion
}
})
{ IsBackground = true }.Start();
}
}
}