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 = false; /// /// 下载数据 /// public void DownloadData() { if (MainPage.InternetStatus == 0) return; //线程开始时间 var beginTime = DateTime.MinValue; DownloadDataComplete = false; var waitPage = new Loading(); MainPage.BaseView.AddChidren(waitPage); waitPage.Start(); string code = StateCode.SUCCESS; var downloadDataThread = new System.Threading.Thread(() => { //===================刷新Token======================= code = Ins.HttpRequest.RefreshToken(); if (code != StateCode.SUCCESS) { MainPage.Log($"刷新token失败"); return; } MainPage.Log($"刷新token成功"); //===================刷新住宅信息======================= code = Ins.HttpRequest.GetHomePager(); if (code != StateCode.SUCCESS) { MainPage.Log($"刷新住宅信息失败"); return; } MainPage.Log($"刷新住宅信息成功"); //===================刷新个人信息======================= code = Ins.HttpRequest.GetUserInfo(); if (code != StateCode.SUCCESS) { MainPage.Log($"刷新个人信息失败"); return; } 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) { MainPage.Log($"读取房间信息成功"); var revData = Newtonsoft.Json.JsonConvert.DeserializeObject(roomResult.Data.ToString()); if (revData != null) { SpatialInfo.CurrentSpatial.UpdateSpatialList(revData.list, OptionType.Cover); } } else { MainPage.Log($"读取房间数据失败:Code:{roomResult.Code}; msg:{roomResult.message}"); } //===================设备======================= var deviceResult = Ins.HttpRequest.GetDeviceList(); if (deviceResult.Code == StateCode.SUCCESS) { MainPage.Log($"读取设备信息成功"); var deviceList = Newtonsoft.Json.JsonConvert.DeserializeObject(deviceResult.Data.ToString()); if (deviceList != null) { 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.SaveFunctionData(false); } deviceList.list.Remove(newFunction);//操作完的数据清理掉,剩下的就是新增的功能 } } } //处理剩下的新增功能 foreach (var newFunction in deviceList.list) { newFunction.SaveFunctionData(false); FunctionList.List.IniFunctionList(newFunction.savePath); } } } else { MainPage.Log($"读取云端设备数据失败:Code:{deviceResult.Code}; Msg:{deviceResult.message}"); } //===================场景========================== var pack = Ins.HttpRequest.GetSceneList(); if (pack.Code == StateCode.SUCCESS) { MainPage.Log($"读取场景数据成功");//:\r\n{pack.Data.ToString()}"); var sceneList = Newtonsoft.Json.JsonConvert.DeserializeObject>(pack.Data.ToString()); if (sceneList != null) { 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.SaveSceneData(false); } sceneList.Remove(newScene);//操作完的数据清理掉,剩下的就是新增的功能 } } //处理剩下的新增功能 foreach (var newScene in sceneList) { newScene.SaveSceneData(false); FunctionList.List.scenes.Add(newScene); } } } 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(() => { beginTime = DateTime.Now; DownloadDataComplete = true; waitPage.Hide(); waitPage.RemoveFromParent(); }); } }); downloadDataThread.IsBackground = true; downloadDataThread.Start(); //网络卡顿,终止下载线程 new System.Threading.Thread(() => { while (beginTime.AddSeconds(6) > DateTime.Now) { if(DownloadDataComplete) { break; } System.Threading.Thread.Sleep(100); } if (DownloadDataComplete) { //下载完成初始化数据 SpatialInfo.CurrentSpatial.Clear(); } else { downloadDataThread.Abort(); Application.RunOnMainThread(() => { waitPage.Hide(); waitPage.RemoveFromParent(); }); } }) { IsBackground = true }.Start(); } } }