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.Spk_Prefix == FunctionCategory.Music || string.IsNullOrEmpty(localFunction.Spk_Prefix)) { 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(); //} localFunction = newFunction; 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(); }); //不考虑网关情况,直接订阅 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 { #region 读取本地数据 //读取音乐信息 UI.Music.A31MusicModel.ReadMusicStates(); //搜索网关 DriverLayer.Control.Ins.SearchLoaclGateway(); #endregion } }) { IsBackground = true }.Start(); } } }