From 9ef48d7b2da7c408b53f73be0f6eef3cbac1c84a Mon Sep 17 00:00:00 2001 From: 黄学彪 <hxb@hdlchina.com.cn> Date: 星期四, 19 十一月 2020 10:23:45 +0800 Subject: [PATCH] Evoyo.Home1.1.0120111601_Release --- ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs | 522 +++++++++++++++++++++++++++++++++------------------------ 1 files changed, 304 insertions(+), 218 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs index fc831b0..b6df0c0 100755 --- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs +++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs @@ -178,6 +178,10 @@ //灏嗙綉鍏崇殑鏁版嵁璁剧疆鍒版湰鍦扮紦瀛樹腑 this.SetGatewayDataToLocalMemmory(gateway, result); } + if (gateway.HomeId == string.Empty) + { + gateway.HomeId = Config.Instance.Home.Id; + } return gateway; } catch (Exception ex) @@ -196,16 +200,21 @@ /// </summary> /// <param name="zbGateway">缃戝叧</param> /// <param name="mode">鏄惁鏄剧ず閿欒</param> - public async Task<bool> AddNewGateway(ZbGateway zbGateway, ShowErrorMode mode) + /// <param name="logMode">鏄惁鍐橪og</param> + public bool AddNewGateway(ZbGateway zbGateway, ShowErrorMode mode, WriteLogMode logMode = WriteLogMode.NO) { //璁剧疆缃戝叧鐨勭粡绾害 bool falge = this.SetGatewaySite(zbGateway, Common.Config.Instance.Home.Longitude, Common.Config.Instance.Home.Latitude, ShowErrorMode.NO); if (falge == false) { + if (logMode == WriteLogMode.YES) + { + HdlLogLogic.Current.WriteLog(-1, zbGateway.GwIP + " 璁剧疆缁忕含搴﹀け璐�"); + } return falge; } //鎵ц娣诲姞缃戝叧鍒板唴瀛� - var result = await this.DoAddGatewayToMemory(zbGateway, mode); + var result = this.DoAddGatewayToMemory(zbGateway, mode, logMode); //鍓嶇殑缃戝叧缁戝畾鍦ㄤ簡褰撳墠璐﹀彿涓嬬殑涓嶅悓浣忓畢閲岄潰 if (result == 0) { @@ -219,6 +228,10 @@ } this.ShowTipMsg(msg); } + if (logMode == WriteLogMode.YES) + { + HdlLogLogic.Current.WriteLog(-1, zbGateway.GwIP + " 缃戝叧缁戝畾鍦ㄤ簡褰撳墠璐﹀彿涓嬬殑涓嶅悓浣忓畢閲岄潰,浜戠涓嶇粰缁戝畾"); + } return false; } if (result == -1) @@ -228,6 +241,20 @@ //娣诲姞缃戝叧鐨勮瘽,寮哄埗涓婚〉鍒锋柊 UserView.UserPage.Instance.RefreshAllForm = true; + if (Config.Instance.Home.TemplateMode == 2) + { + //濡傛灉杩欎釜绫诲瀷鐨勭綉鍏冲彧鏈変竴涓ā鏉�,鍒欒嚜鍔ㄥ尮閰� + var dicName = TemplateData.TemplateCommonLogic.Current.GetGatewayCanSelectTemplateName(zbGateway); + if (dicName.Count == 1) + { + foreach (var tempId in dicName.Keys) + { + TemplateData.TemplateCommonLogic.Current.AddGatewayTemplateSelect(zbGateway.GwId, tempId); + break; + } + } + } + return true; } @@ -249,8 +276,9 @@ /// </summary> /// <param name="zbGateway">缃戝叧瀵硅薄</param> /// <param name="mode">鏄惁鏄剧ず閿欒</param> + /// <param name="logMode">鏄惁鍐橪og</param> /// <returns></returns> - private async Task<int> DoAddGatewayToMemory(ZbGateway zbGateway, ShowErrorMode mode) + private int DoAddGatewayToMemory(ZbGateway zbGateway, ShowErrorMode mode, WriteLogMode logMode = WriteLogMode.NO) { if (zbGateway == null) { @@ -272,13 +300,17 @@ string msg = Language.StringByID(R.MyInternationalizationString.uGetGatewayInfoFail); this.ShowTipMsg(msg); } + if (logMode == WriteLogMode.YES) + { + HdlLogLogic.Current.WriteLog(-1, zbGateway.GwIP + " 鑾峰彇缃戝叧淇℃伅澶辫触"); + } return -1; } //璁剧疆浣忓畢ID鍒扮綉鍏� if (result.HomeId != Common.Config.Instance.HomeId) { - bool flage2 = await this.SetHomeIdToGateway(zbGateway, Common.Config.Instance.HomeId, mode); + bool flage2 = this.SetHomeIdToGateway(zbGateway, Common.Config.Instance.HomeId, mode); if (flage2 == false) { if (mode == ShowErrorMode.YES) @@ -286,6 +318,10 @@ //鍚戠綉鍏宠缃綇瀹匢D澶辫触 string msg = Language.StringByID(R.MyInternationalizationString.uSetHomeIdToGatewayFail); this.ShowTipMsg(msg); + } + if (logMode == WriteLogMode.YES) + { + HdlLogLogic.Current.WriteLog(-1, zbGateway.GwIP + " 鍚戠綉鍏宠缃綇瀹匢D澶辫触"); } return -1; } @@ -316,7 +352,7 @@ } //鍒锋柊鐨勬槸缂撳瓨,涓嶅埛鏂扮湡瀹炵墿鐞嗙綉鍏� - this.dicGateway[gwID].GatewayOnlineFlage = zbGateway.GatewayOnlineFlage; + this.dicGateway[gwID].OnlineTime = DateTime.Now; //灏嗙綉鍏崇殑鏁版嵁璁剧疆鍒版湰鍦扮紦瀛樹腑 this.SetGatewayDataToLocalMemmory(this.dicGateway[gwID], result); //椤轰究杩欎釜鍙橀噺涔熻缃竴涓� @@ -337,10 +373,28 @@ /// <param name="zbGateway"></param> /// <param name="HomeId"></param> /// <returns></returns> - public async Task<bool> SetHomeIdToGateway(ZbGateway zbGateway, string HomeId, ShowErrorMode mode) + public bool SetHomeIdToGateway(ZbGateway zbGateway, string HomeId, ShowErrorMode mode) { - ZbGateway realWay = null; - if (this.GetRealGateway(ref realWay, zbGateway) == false) + //璐﹀彿ID + string accountId = string.Empty; + if (HomeId != string.Empty) + { + if (UserCenterResourse.UserInfo.AuthorityNo == 1) + { + //涓昏处鍙� + accountId = Config.Instance.Guid; + } + else + { + accountId = Config.Instance.Home.MainUserDistributedMark; + } + } + var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 82 } }; + var data = new Newtonsoft.Json.Linq.JObject { { "HomeId", HomeId }, { "AccountId", accountId } }; + jObject.Add("Data", data); + //浣忓畢ID鐨勮缃�,鍥哄畾浣跨敤灞�鍩熺綉,涓嶅瓨鍦ㄨ繙绋嬬殑璇存硶 + var result = this.SendJobjectDataToGateway(zbGateway.GwId, "GwSetHomeId", jObject.ToString(), "GwSetHomeId_Respon", 5, true); + if (result.ErrorMsgDiv == -1) { if (mode == ShowErrorMode.YES) { @@ -350,13 +404,11 @@ } return false; } - - var info = await realWay.GwSetHomeIdAsync(HomeId); - if (info != null && info.gwSetHomeIdData != null) + if (result.ErrorMsgDiv == 0) { - return true; + return false; } - return false; + return true; } /// <summary> @@ -372,7 +424,7 @@ //鑾峰彇鎺у埗涓讳汉璐﹀彿鐨凾oken bindGateway.LoginAccessToken = UserCenterLogic.GetConnectMainToken(); - var result = UserCenterLogic.GetResultCodeByRequestHttps("App/BindGatewayToHome", true, bindGateway, new List<string> { "NotCheck" }); + var result = UserCenterLogic.GetResultCodeByRequestHttps("App/BindGatewayToHome", true, bindGateway, new List<string> { "NotCheck" }, false); if (result == "Error") { return -1; @@ -418,7 +470,7 @@ /// </summary> /// <param name="zbGateway">缃戝叧</param> /// <param name="btnMsg">娑堟伅鎺т欢</param> - public async Task<int> ReBindNewGateway(ZbGateway zbGateway, NormalViewControl btnMsg = null) + public int ReBindNewGateway(ZbGateway zbGateway, NormalViewControl btnMsg = null) { if (zbGateway == null) { @@ -435,7 +487,7 @@ } //璁剧疆浣忓畢ID鍒扮綉鍏� - bool flage2 = await this.SetHomeIdToGateway(zbGateway, Common.Config.Instance.HomeId, ShowErrorMode.YES); + bool flage2 = this.SetHomeIdToGateway(zbGateway, Common.Config.Instance.HomeId, ShowErrorMode.YES); if (flage2 == false) { //鍚戠綉鍏宠缃綇瀹匢D澶辫触 @@ -470,7 +522,7 @@ btnMsg.TextID = R.MyInternationalizationString.uGatewayDataIsChangingPleaseWhait; }); } - await Task.Delay(8000); + System.Threading.Thread.Sleep(8000); //鑾峰彇缃戝叧鐨勪俊鎭� ZbGatewayData.GetGwData result = null; @@ -484,7 +536,7 @@ } count--; //鏈�澶氬啀绛�20绉� - await Task.Delay(4000); + System.Threading.Thread.Sleep(4000); } if (result == null) { @@ -506,7 +558,7 @@ } //鍒锋柊鐨勬槸缂撳瓨,涓嶅埛鏂扮湡瀹炵墿鐞嗙綉鍏� - this.dicGateway[gwID].GatewayOnlineFlage = zbGateway.GatewayOnlineFlage; + this.dicGateway[gwID].OnlineTime = DateTime.Now; //灏嗙綉鍏崇殑鏁版嵁璁剧疆鍒版湰鍦扮紦瀛樹腑 this.SetGatewayDataToLocalMemmory(this.dicGateway[gwID], result); //椤轰究杩欎釜鍙橀噺涔熻缃竴涓� @@ -520,6 +572,20 @@ //娣诲姞缃戝叧鐨勮瘽,寮哄埗涓婚〉鍒锋柊 UserView.UserPage.Instance.RefreshAllForm = true; + + if (Config.Instance.Home.TemplateMode == 2) + { + //濡傛灉杩欎釜绫诲瀷鐨勭綉鍏冲彧鏈変竴涓ā鏉�,鍒欒嚜鍔ㄥ尮閰� + var dicName = TemplateData.TemplateCommonLogic.Current.GetGatewayCanSelectTemplateName(zbGateway); + if (dicName.Count == 1) + { + foreach (var tempId in dicName.Keys) + { + TemplateData.TemplateCommonLogic.Current.AddGatewayTemplateSelect(zbGateway.GwId, tempId); + break; + } + } + } return 1; } @@ -544,7 +610,7 @@ var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 91 } }; var data = new Newtonsoft.Json.Linq.JObject { { "GwName", gatewayName } }; jObject.Add("Data", data); - var result = this.SendJobjectDataToGateway(zbGateway, "GwReName", jObject.ToString(), "GwReName_Respon"); + var result = this.SendJobjectDataToGateway(zbGateway.GwId, "GwReName", jObject.ToString(), "GwReName_Respon"); if (result.ErrorMsg != null) { this.ShowTipMsg(result.ErrorMsg); @@ -579,12 +645,10 @@ /// 鎵ц鍒囨崲缃戝叧鎿嶄綔 /// </summary> /// <param name="gatewayId"></param> - public async Task<bool> DoSwitchGateway(string gatewayId) + public bool DoSwitchGateway(string gatewayId) { - var zbGateway = this.GetLocalGateway(gatewayId); - //閲嶆柊鑾峰彇鍦ㄧ嚎缃戝叧鐨勪俊鎭� - var result = await this.GetOnlineGatewayInfo(gatewayId); + var result = this.GetOnlineGatewayInfo(gatewayId); if (result == false) { return false; @@ -603,7 +667,7 @@ /// </summary> /// <param name="gatewayId"></param> /// <returns></returns> - private async Task<bool> GetOnlineGatewayInfo(string gatewayId) + private bool GetOnlineGatewayInfo(string gatewayId) { //鏄剧ず杩涘害鏉� ProgressBar.Show(); @@ -616,7 +680,7 @@ //閲嶆柊璁剧疆浣忓畢ID(杩欎釜搴旇鏄笉缁忚繃APP,鐩存帴鎶婄綉鍏虫仮澶嶄簡鍑哄巶璁剧疆) if (this.HomeIdIsEmpty(realWay.HomeId) == true) { - int result2 = await this.ReBindNewGateway(realWay); + int result2 = this.ReBindNewGateway(realWay); if (result2 == 0) { //鍑虹幇鏈煡閿欒,璇风◢鍚庡啀璇� @@ -646,9 +710,14 @@ return false; } } + //鍒锋柊鍏ㄩ儴鍦烘櫙 + if (this.IsMainGateway(realWay) == 1) + { + HdlSceneLogic.Current.RefreshSceneUIList(false); + } //鑾峰彇鍏ㄩ儴璁惧 - int result = LocalDevice.Current.SetDeviceToMemmoryByGateway(realWay, false); + int result = LocalDevice.Current.SetDeviceToMemmoryByGateway(realWay.GwId, false); //鍏抽棴杩涘害鏉� ProgressBar.Close(); if (result == -1) @@ -675,25 +744,15 @@ /// <summary> /// 鍒犻櫎缃戝叧锛屽寘鎷簯绔拰鏈湴(澶辫触鏃朵笉浼氭樉绀轰俊鎭紝骞朵笖浼氳繑鍥瀟rue) /// </summary> - /// <param name="zbGateway"></param> - public async Task<bool> DeleteGateway(ZbGateway zbGateway) - { - //绉婚櫎鏈湴缃戝叧淇℃伅 - return await this.DeleteGateway(zbGateway.GwId); - } - - /// <summary> - /// 鍒犻櫎缃戝叧锛屽寘鎷簯绔拰鏈湴(澶辫触鏃朵笉浼氭樉绀轰俊鎭紝骞朵笖浼氳繑鍥瀟rue) - /// </summary> /// <param name="zbGatewayID"></param> - public async Task<bool> DeleteGateway(string zbGatewayID) + public bool DeleteGateway(string zbGatewayID) { ZbGateway realWay = null; this.GetRealGateway(ref realWay, zbGatewayID); //娓呯┖缃戝叧鐨勪綇瀹匢D 缃戝叧瑙g粦澶辫触 涓嶇悊瀹�,鍥犱负缃戝叧鍙互鎸夋寜閿己鍒舵悳绱㈠緱鍒� if (realWay != null) { - await this.SetHomeIdToGateway(realWay, string.Empty, ShowErrorMode.NO); + this.SetHomeIdToGateway(realWay, string.Empty, ShowErrorMode.NO); } //鍒犻櫎浜戠鐨勭綉鍏� @@ -707,7 +766,7 @@ //鏂紑mqtt杩炴帴 if (realWay != null) { - realWay.DisConnectLocalMqttClient("GD"); + realWay.CloseLocalConnectionOnForce(); } return true; @@ -787,29 +846,14 @@ //铏氭嫙鐗╃悊缃戝叧 listRealWay.Add(listGateway[i]); } - //鏍囪瘑鎸囧畾缃戝叧涓轰笉鍦ㄧ嚎 - listRealWay[i].GatewayOnlineFlage = false; } - - //杩欐槸绗竴閬撳潕,寮哄埗妫�鏌IFI:绛夊緟2绉�(鍥犱负wifi鐨勬椂鍊欙紝瀹冧細鑷姩鍘诲埛鏂癴lage) - System.Threading.Thread.Sleep(2000); //妫�鏌ユ槸鍚︽嫢鏈夌綉鍏冲瓨鍦ㄤ簬WIFi涓� if (this.CheckHadGatewayInWifi(listRealWay) == false) { //绗簩閬撳潕锛氬湪杩滅▼鐨勬儏鍐典笅鍒锋柊缃戝叧鐨勫湪绾跨姸鎬� this.RefreshGatewayOnlineOnRemode(listRealWay); } - - //鍒锋柊缂撳瓨鐨勫湪绾挎爣璇� - foreach (var zbway in listRealWay) - { - string gwID = zbway.GwId; - if (this.dicGateway.ContainsKey(gwID) == false) - { - continue; - } - this.dicGateway[gwID].GatewayOnlineFlage = zbway.GatewayOnlineFlage; - } + //wifi鎯呭喌涓�,鐢盇pplication鑷繁鍒锋柊鏍囪瘑 } /// <summary> @@ -821,8 +865,8 @@ { foreach (var zbway in listGateway) { - //鏄惁瀛樺湪缃戝叧瀛樺湪浜嶹IFI涓� - if (zbway.GatewayOnlineFlage == true) + //濡傛灉骞挎挱寰楀埌缃戝叧,鍒欎細鍒锋柊OnlineTime,濡傛灉涓庡綋鍓嶆椂闂寸浉宸皯浜庢寚瀹氱鏁�,鍒欏垽鏂负瀛樺湪缃戝叧瀛樺湪浜嶹IFI涓� + if ((DateTime.Now - zbway.OnlineTime).TotalSeconds <= ZigBee.Common.Application.SendTime * 2) { return true; } @@ -838,7 +882,7 @@ private void RefreshGatewayOnlineOnRemode(List<ZbGateway> listGateway) { //鑾峰彇浜戠涓婇潰鐨勭綉鍏� - Dictionary<string, GatewayResult> dicDbGateway = HdlGatewayLogic.Current.GetGateWayListFromDataBase(); + Dictionary<string, GatewayResult> dicDbGateway = this.GetGateWayListFromDataBase(); if (dicDbGateway == null) { return; @@ -850,19 +894,20 @@ continue; } string strId = way.GwId; - if (dicDbGateway.ContainsKey(strId) == true) //濡傛灉浜戠涓婇潰鏈夎繖涓綉鍏� + if (dicDbGateway.ContainsKey(strId) == true + && dicDbGateway[strId].MqttOnlineStatus == true) //濡傛灉浜戠涓婇潰鏈夎繖涓綉鍏� { - way.GatewayOnlineFlage = dicDbGateway[strId].MqttOnlineStatus; + way.OnlineTime = DateTime.Now; } } } /// <summary> - /// 鏍规嵁鏌愮鏍囪瘑鍒ゆ柇鎸囧畾缃戝叧鏄惁鍦ㄧ嚎 + /// 鏍规嵁鏈湴缂撳瓨鍒ゆ柇鎸囧畾缃戝叧鏄惁鍦ㄧ嚎 /// </summary> /// <param name="zbGateway"></param> /// <returns></returns> - public bool CheckGatewayOnlineByFlag(ZbGateway zbGateway) + public bool CheckGatewayOnlineByMemory(ZbGateway zbGateway) { if (zbGateway == null) { @@ -872,10 +917,42 @@ string gwID = zbGateway.GwId; if (this.dicGateway.ContainsKey(gwID) == true) { - return this.dicGateway[gwID].GatewayOnlineFlage; + return this.CheckGatewayOnlineByFlage(dicGateway[gwID]); } - return zbGateway.GatewayOnlineFlage; + return this.CheckGatewayOnlineByFlage(zbGateway); + } + + /// <summary> + /// 鍒锋柊缃戝叧鐨勫湪绾挎椂闂寸偣 + /// </summary> + /// <param name="i_gatewayId">缃戝叧ID</param> + public void RefreshGatewayOnlineTime(string i_gatewayId) + { + try + { + if (this.dicGateway.ContainsKey(i_gatewayId) == true) + { + this.dicGateway[i_gatewayId].OnlineTime = DateTime.Now; + } + } + catch { } + } + + /// <summary> + /// 鏍规嵁鎸囧畾鏍囪瘑,鍒ゆ柇缃戝叧鏄惁鍦ㄧ嚎 + /// </summary> + /// <param name="zbGateway"></param> + /// <returns></returns> + private bool CheckGatewayOnlineByFlage(ZbGateway zbGateway) + { + if (this.nowGwConnectMode == GatewayConnectMode.Remote) + { + //杩滅▼姣�20绉掓娴嬩竴娆� + return (DateTime.Now - zbGateway.OnlineTime).TotalSeconds <= 40; + } + //濡傛灉骞挎挱寰楀埌缃戝叧,鍒欎細鍒锋柊OnlineTime,濡傛灉涓庡綋鍓嶆椂闂寸浉宸皯浜�10绉�,鍒欏垽鏂负鍦ㄧ嚎 + return (DateTime.Now - zbGateway.OnlineTime).TotalSeconds <= 15; } #endregion @@ -1383,7 +1460,7 @@ { //鑾峰彇缃戝叧鐗堟湰淇℃伅 var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 95 } }; - var result = this.SendJobjectDataToGateway(zbGateway, "GetZbGwInfo", jObject.ToString(), "GetZbGwInfo_Respon", 5, useLocalConnect); + var result = this.SendJobjectDataToGateway(zbGateway.GwId, "GetZbGwInfo", jObject.ToString(), "GetZbGwInfo_Respon", 5, useLocalConnect); if (result.ErrorMsgDiv != 1) { @@ -1425,6 +1502,7 @@ localWay.GwSerialNum = data.GWSN; localWay.IsMainGateWay = data.IsDominant == 1 ? true : false; localWay.GwIP = data.GwIP; + localWay.GwMac = data.GwMac; localWay.LinuxImageType = data.LinuxImageType; localWay.LinuxHardVersion = data.LinuxHWVersion; localWay.LinuxFirmwareVersion = data.LinuxFWVersion; @@ -1433,6 +1511,8 @@ localWay.CoordinatorImageId = data.ZbImageType; localWay.DriveCodeList = data.DriveCodeList; localWay.GwVersionDate = data.AppVersion; + localWay.OnlineTime = DateTime.Now; + if (saveFile == true) { localWay.ReSave(); @@ -1441,70 +1521,39 @@ #endregion - #region 鈻� 缃戝叧鎴块棿鐩稿叧_______________________ + #region 鈻� 娓呯┖鐪熷疄缃戝叧閾炬帴___________________ /// <summary> - /// 鑾峰彇缃戝叧鎵�鍦ㄧ殑鎴块棿 + /// 娓呯┖鍏ㄩ儴鐨勭湡瀹炵墿鐞嗙綉鍏崇殑閾炬帴 /// </summary> - /// <param name="zbGateway">缃戝叧瀵硅薄</param> - /// <returns></returns> - public Room GetRoomByGateway(ZbGateway zbGateway) + /// <param name="roadGateway">鏄惁鍔犺浇鏈湴鐨勭綉鍏冲璞″埌鐪熷疄鍒楄〃涓�</param> + public void ClearAllRealGatewayConection(bool roadGateway) { - return this.GetRoomByGateway(zbGateway.GwId); - } - - /// <summary> - /// 鑾峰彇缃戝叧鎵�鍦ㄧ殑鎴块棿 - /// </summary> - /// <param name="gatewayId">缃戝叧ID</param> - /// <returns></returns> - public Room GetRoomByGateway(string gatewayId) - { - var localGateway = this.GetLocalGateway(gatewayId); - if (localGateway == null) + //鏂紑mqtt杩炴帴(鍗充娇淇濆瓨鍦ㄥ唴瀛樺綋涓篃娌¢棶棰�,鍥犱负濡傛灉骞挎挱涓嶅埌,鍒欏畠涓嶄細寤虹珛閾炬帴) + for (int i = 0; i < ZbGateway.GateWayList.Count; i++) { - return null; + ZbGateway.GateWayList[i].CloseLocalConnectionOnForce(); } - return HdlRoomLogic.Current.GetRoomById(localGateway.RoomId); - } - - /// <summary> - /// 鍙樻洿缃戝叧鎴块棿 - /// </summary> - /// <param name="gwId">缃戝叧Id</param> - /// <param name="roomId">鎴块棿ID</param> - public void ChangedGatewayRoom(string gwId, string roomId) - { - var localGateway = this.GetLocalGateway(gwId); - if (localGateway != null) + //鍔犺浇鏈湴缃戝叧瀵硅薄 + if (roadGateway == true) { - localGateway.RoomId = roomId; - localGateway.ReSave(); - //娣诲姞澶囦唤 - HdlAutoBackupLogic.AddOrEditorFile(localGateway.FilePath); + List<string> listFile = this.GetAllGatewayFile(); + //鍙嶅簭鍒楀寲娣诲姞鍒扮紦瀛� + foreach (string file in listFile) + { + //浠庢枃浠朵腑鍙嶅簭鍒楀寲鍑虹綉鍏冲璞� + var gateway = this.GetGatewayFromFile(file); + if (gateway == null) + { + continue; + } + var tempWay = ZbGateway.GateWayList.Find(obj => (obj != null) && (obj.GwId == gateway.GwId)); + if (tempWay == null) + { + ZbGateway.GateWayList.Add(gateway); + } + } } - } - - #endregion - - #region 鈻� 娓呯┖鐪熷疄缃戝叧鍒楄〃___________________ - - /// <summary> - /// 娓呯┖鍏ㄩ儴鐨勭湡瀹炵墿鐞嗙綉鍏冲璞� - /// </summary> - public void ClearAllRealGateway() - { - //鍥犱负閭d竴鐬棿锛屾湁鍙兘mqtt浼氬姞鍥炴潵,鎵�浠ュ厛鍔犵紦瀛� - var list = new List<ZbGateway>(); - list.AddRange(ZbGateway.GateWayList); - //鐒跺悗娓呯┖鎺� - ZbGateway.GateWayList.Clear(); - //鏈�鍚庡啀鏂紑mqtt杩炴帴 - for (int i = 0; i < list.Count; i++) - { - list[i].DisConnectLocalMqttClient("G"); - } - list.Clear(); } #endregion @@ -1519,6 +1568,11 @@ /// <returns></returns> public List<FirmwareVersionInfo> GetGatewayAllNewVersion(ZbGateway zbGateway, ShowErrorMode mode = ShowErrorMode.YES) { + //濡傛灉鏄睍绀烘ā鏉�,鎴栬�呮槸铏氭嫙浣忓畢鐨勮瘽,娌℃湁浠�涔堟柊鐗堟湰鐨勮娉� + if (Common.Config.Instance.Home.IsVirtually == true || Common.Config.Instance.Home.IsShowTemplate == true) + { + return new List<FirmwareVersionInfo> { null, null, null }; + } //鑾峰彇缃戝叧鐗堟湰淇℃伅 var result = this.GetGatewayInfo(zbGateway, false, mode); if (result == null) @@ -1541,7 +1595,7 @@ if (flage == 1) { //娌$綉鐨勬椂鍊欎笉鍐嶅鐞� - HdlFirmwareUpdateLogic.AddFirmwareVersionInfo(FirmwareLevelType.Coordinator, + HdlFirmwareUpdateLogic.AddFirmwareVersionInfo(FirmwareLevelType.A鍗忚皟鍣�, localWay.CoordinatorHardVersion.ToString(), localWay.CoordinatorImageId.ToString()); } @@ -1553,7 +1607,7 @@ localWay.LinuxFirmwareVersion); //鍗忚皟鍣ㄧ増鏈� - var coordinatorFirmware = HdlFirmwareUpdateLogic.GetFirmwareMostVersionInfo(FirmwareLevelType.Coordinator, + var coordinatorFirmware = HdlFirmwareUpdateLogic.GetFirmwareMostVersionInfo(FirmwareLevelType.A鍗忚皟鍣�, localWay.CoordinatorHardVersion.ToString(), localWay.CoordinatorImageId.ToString(), localWay.CoordinatorFirmwareVersion); @@ -1571,13 +1625,13 @@ //娣诲姞铏氭嫙椹卞姩鐨勫崌绾у浐浠�(鎴愪笉鎴愬姛閮芥棤鎵�璋�) 蹇呴』鑳藉鑱旂綉鎵嶈 if (flage == 1) { - HdlFirmwareUpdateLogic.AddFirmwareVersionInfo(FirmwareLevelType.VirtualDevice, + HdlFirmwareUpdateLogic.AddFirmwareVersionInfo(FirmwareLevelType.A铏氭嫙椹卞姩, data.DriveHwVersion.ToString(), data.DriveImageType.ToString()); } //铏氭嫙椹卞姩 - var virtualFirmware = HdlFirmwareUpdateLogic.GetFirmwareMostVersionInfo(FirmwareLevelType.VirtualDevice, + var virtualFirmware = HdlFirmwareUpdateLogic.GetFirmwareMostVersionInfo(FirmwareLevelType.A铏氭嫙椹卞姩, data.DriveHwVersion.ToString(), data.DriveImageType.ToString(), data.DriveFwVersion); @@ -1604,8 +1658,15 @@ /// <returns></returns> public List<ZbGatewayData.DriveCodeObj> GetListVDDriveCode(ZbGateway zbGateway) { + //濡傛灉鏄睍绀烘ā鏉�,鎴栬�呮槸铏氭嫙浣忓畢鐨勮瘽,鐩存帴鍙栫紦瀛� + if (Common.Config.Instance.Home.IsVirtually == true || Common.Config.Instance.Home.IsShowTemplate == true) + { + //鍙栨湰鍦板璞� + var localgw = this.GetLocalGateway(zbGateway.GwId); + return localgw != null ? zbGateway.DriveCodeList : zbGateway.DriveCodeList; + } var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 505 } }; - var result = this.SendJobjectDataToGateway(zbGateway, "VirtualDrive/CatDriveCode", jObject.ToString(), "VirtualDrive/CatDriveCode_Respon"); + var result = this.SendJobjectDataToGateway(zbGateway.GwId, "VirtualDrive/CatDriveCode", jObject.ToString(), "VirtualDrive/CatDriveCode_Respon"); if (result.ErrorMsg != null) { this.ShowTipMsg(result.ErrorMsg); @@ -1639,12 +1700,16 @@ /// <returns></returns> public int IsMainGateway(string waiID) { - ZbGateway zbGateway = null; - if (this.GetRealGateway(ref zbGateway, waiID) == false) + var realWay = ZbGateway.GateWayList.Find((obj) => + { + return obj.GwId == waiID; + }); + //铏氭嫙缃戝叧涔熻繑鍥� 0 + if (realWay == null || realWay.IsVirtual == true) { return 0; } - return zbGateway.IsMainGateWay == true ? 1 : 2; + return realWay.IsMainGateWay == true ? 1 : 2; } #endregion @@ -1811,7 +1876,7 @@ //鑾峰彇鎺у埗涓讳汉璐﹀彿鐨凾oken pra.ReqDto.LoginAccessToken = UserCenterLogic.GetConnectMainToken(); - var result = UserCenterLogic.GetResponseDataByRequestHttps("App/GetSingleHomeGatewayPagger", true, pra, list); + var result = UserCenterLogic.GetResponseDataByRequestHttps("App/GetSingleHomeGatewayPagger", true, pra, list, false); if (string.IsNullOrEmpty(result) == true) { canBreak = true; @@ -1867,6 +1932,11 @@ this.ShowTipMsg(msg); } return false; + } + if (((decimal)Longitude) == 0 && ((decimal)Latitude) == 0) + { + //娌℃湁閰嶇疆杩囩粡绾害 + return true; } int result = -1; @@ -1943,7 +2013,7 @@ List<string> listNotShowError = new List<string>() { "NoExist", "NoBind", "NoRecord", "NotCheck" }; - bool result = UserCenterLogic.GetResultStatuByRequestHttps("App/ReleaseGatewayToHome", true, Pra, listNotShowError); + bool result = UserCenterLogic.GetResultStatuByRequestHttps("App/ReleaseGatewayToHome", true, Pra, listNotShowError, false); if (result == false) { return false; @@ -1974,54 +2044,53 @@ /// <summary> /// 閲嶆柊鍙戦�佸懡浠ゅ幓缁戝畾鏂綉鎯呭喌涓嬪浠界殑缃戝叧 /// </summary> - public void ResetComandToBindBackupGateway() + public bool ResetComandToBindBackupGateway() { - HdlThreadLogic.Current.RunThread(() => + var fileData = HdlFileLogic.Current.ReadFileByteContent(DirNameResourse.BackupGatewayIdFile); + if (fileData == null) { - var fileData = HdlFileLogic.Current.ReadFileByteContent(DirNameResourse.BackupGatewayIdFile); - if (fileData == null) - { - return; - } - this.listBackupGwId = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(System.Text.Encoding.UTF8.GetString(fileData)); - var listTempId = new List<string>(); - listTempId.AddRange(this.listBackupGwId); + return true; + } + this.listBackupGwId = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(System.Text.Encoding.UTF8.GetString(fileData)); + var listTempId = new List<string>(); + listTempId.AddRange(this.listBackupGwId); - //璋冪敤鎺ュ彛锛岀粦瀹氱綉鍏� - var bindGateway = new BindGatewayPra(); - //鑾峰彇鎺у埗涓讳汉璐﹀彿鐨凾oken - bindGateway.LoginAccessToken = UserCenterLogic.GetConnectMainToken(); + //璋冪敤鎺ュ彛锛岀粦瀹氱綉鍏� + var bindGateway = new BindGatewayPra(); + //鑾峰彇鎺у埗涓讳汉璐﹀彿鐨凾oken + bindGateway.LoginAccessToken = UserCenterLogic.GetConnectMainToken(); - foreach (var gwId in listTempId) + foreach (var gwId in listTempId) + { + bindGateway.BindGateways.Clear(); + bindGateway.BindGateways.Add(gwId); + var result = UserCenterLogic.GetResultCodeByRequestHttps("App/BindGatewayToHome", true, bindGateway, new List<string> { "NotCheck" }, false); + if (result == "Success") { - bindGateway.BindGateways.Clear(); - bindGateway.BindGateways.Add(gwId); - var result = UserCenterLogic.GetResultCodeByRequestHttps("App/BindGatewayToHome", true, bindGateway, new List<string> { "NotCheck" }); - if (result == "Success") - { - this.listBackupGwId.Remove(gwId); - } - if (result == "Error") - { - break; - } + this.listBackupGwId.Remove(gwId); } + if (result == "Error") + { + break; + } + } - if (this.listBackupGwId.Count == 0) + if (this.listBackupGwId.Count == 0) + { + //濡傛灉娌℃湁浜嗗唴瀹�,鍒欏垹闄ゆ枃浠� + string file = DirNameResourse.BackupGatewayIdFile; + if (System.IO.File.Exists(file) == true) { - //濡傛灉娌℃湁浜嗗唴瀹�,鍒欏垹闄ゆ枃浠� - string file = DirNameResourse.BackupGatewayIdFile; - if (System.IO.File.Exists(file) == true) - { - System.IO.File.Delete(file); - } + System.IO.File.Delete(file); } - else - { - //澶囦唤 - HdlFileLogic.Current.SaveFileContent(DirNameResourse.BackupGatewayIdFile, listBackupGwId); - } - }); + return true; + } + else + { + //澶囦唤 + HdlFileLogic.Current.SaveFileContent(DirNameResourse.BackupGatewayIdFile, listBackupGwId); + return false; + } } #endregion @@ -2038,26 +2107,16 @@ /// <param name="waitTime">瓒呮椂鏃堕棿(绉�)</param> /// <param name="useLocalConnect">鏄惁寮哄埗浣跨敤鏈湴杩炴帴鍙戦��</param> /// <returns>缃戝叧杩斿洖鐨勬暟鎹�</returns> - public ReceiptGatewayResult SendJobjectDataToGateway(ZbGateway gateway, string sendTopic, string sendData, string receiptTopic, int waitTime = 5, bool useLocalConnect = false) + public ReceiptGatewayResult SendJobjectDataToGateway(string gatewayId, string sendTopic, string sendData, string receiptTopic, int waitTime = 5, bool useLocalConnect = false) { var reResult = new ReceiptGatewayResult(); - ZbGateway myGateway = null; - if (this.GetRealGateway(ref myGateway, gateway) == false) - { - //鑾峰彇缃戝叧瀵硅薄澶辫触 - reResult.ErrorMsg = Language.StringByID(R.MyInternationalizationString.uGetGatewayTagartFail); - reResult.ErrorMsgDiv = -1; - return reResult; - } - //缃戝叧ID - string gatewayID = gateway.GwId; //閿欒涓婚 - string errorTopic = gatewayID + "/" + "Error_Respon"; + string errorTopic = gatewayId + "/" + "Error_Respon"; //妫�娴嬪璞$殑涓婚 - string checkTopic = gatewayID + "/" + receiptTopic; + string checkTopic = gatewayId + "/" + receiptTopic; - Action<string, string> receiptAction = (topic, message) => + HdlGatewayReceiveLogic.Current.AddGatewayReceiveEvent(gatewayId, (topic, message) => { var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); @@ -2072,17 +2131,10 @@ { reResult.ReceiptData = jobject["Data"].ToString(); } - }; - myGateway.Actions += receiptAction; + }); + //鍙戦�佹暟鎹� - if (useLocalConnect == false) - { - myGateway.Send(sendTopic, sendData); - } - else - { - myGateway.SendLocation(sendTopic, System.Text.Encoding.UTF8.GetBytes(sendData)); - } + this.SendJobjectData(gatewayId, sendTopic, sendData, useLocalConnect); //瓒呮椂鏃堕棿 int TimeOut = 0; @@ -2093,14 +2145,53 @@ System.Threading.Thread.Sleep(50); TimeOut++; } - myGateway.Actions -= receiptAction; - receiptAction = null; + //绉婚櫎缃戝叧鐩戝惉浜嬩欢 + HdlGatewayReceiveLogic.Current.RemoveGatewayReceiveEvent(); + if (reResult.ReceiptData == null) { reResult.ErrorMsgDiv = 0; } return reResult; + } + + /// <summary> + /// 鍗曠函鎵ц鍙戦�乯son鏁版嵁鍒扮綉鍏� + /// </summary> + /// <param name="i_gatewayId">缃戝叧id</param> + /// <param name="topic">涓婚</param> + /// <param name="sendData">鍙戦�佺殑json鏁版嵁</param> + /// <param name="useLocalConnect">鏄惁寮哄埗浣跨敤鏈湴杩炴帴鍙戦��</param> + public void SendJobjectData(string i_gatewayId, string topic, string sendData, bool useLocalConnect = false) + { + ZbGateway realWay = null; + for (int i = 0; i < ZbGateway.GateWayList.Count; i++) + { + //瀵绘壘鐪熷疄鐗╃悊缃戝叧瀵硅薄 + if (ZbGateway.GateWayList[i].GwId == i_gatewayId) + { + realWay = ZbGateway.GateWayList[i]; + break; + } + } + if (realWay == null) + { + //濡傛灉缃戝叧瀵硅薄涓㈠け浜�,鍒欏垱寤轰釜鏂扮殑 + realWay = new ZbGateway { IsVirtual = true, }; + realWay.GwId = i_gatewayId; + realWay.HomeId = Config.Instance.HomeId; + ZbGateway.GateWayList.Add(realWay); + } + if (useLocalConnect == false) + { + realWay.Send(topic, System.Text.Encoding.UTF8.GetBytes(sendData)); + } + else + { + //寮哄埗浣跨敤鏈湴杩炴帴 + realWay.SendLocation(topic, System.Text.Encoding.UTF8.GetBytes(sendData)); + } } #endregion @@ -2152,8 +2243,8 @@ } else if (this.nowGwConnectMode == GatewayConnectMode.WIFI) { - //灞�鍩熺綉姣�5绉掓娴嬩竴娆� - if (waitCount < 5) { continue; } + //灞�鍩熺綉姣�8绉掓娴嬩竴娆� + if (waitCount < 8) { continue; } } waitCount = 0; @@ -2186,27 +2277,18 @@ private void CheckGatewayStatuByWIFI(Dictionary<string, bool> dicOldOnline) { //浠庣綉鍏宠幏鍙栧叏閮ㄧ殑缃戝叧 - List<ZbGateway> list = this.GetAllGatewayFromGateway(); - foreach (var way in list) - { - //灏嗘爣璇嗙疆涓篺alse - way.GatewayOnlineFlage = false; - } - //绛変釜2绉� - System.Threading.Thread.Sleep(2000); + List<ZbGateway> list = this.GetAllLocalGateway(); //2020.05.25杩藉姞:姝や綇瀹呮槸鍚︽嫢鏈夌綉鍏冲湪绾� var hadGwOnline = false; foreach (var way in list) { - if (dicOldOnline.ContainsKey(way.GwId) == true) + if (dicOldOnline.ContainsKey(way.GwId) == true + && this.CheckGatewayOnlineByFlage(way) == true) { - if (way.GatewayOnlineFlage == true) - { - //鏈変竴涓綉鍏冲湪绾�,鍗冲湪绾� - hadGwOnline = true; - break; - } + //鏈変竴涓綉鍏冲湪绾�,鍗冲湪绾� + hadGwOnline = true; + break; } } @@ -2216,7 +2298,8 @@ if (dicOldOnline.ContainsKey(gwId) == true) { //缃戝叧涔熶笉澶�,鐩存帴鎺ㄩ�佸惂 - this.PushGatewayOnlineStatuToForm(gwId, way.GatewayOnlineFlage, hadGwOnline); + bool online = this.CheckGatewayOnlineByFlage(way); + this.PushGatewayOnlineStatuToForm(gwId, online, hadGwOnline); } else { @@ -2232,7 +2315,7 @@ private void CheckGatewayStatuByRemote(Dictionary<string, bool> dicOldOnline) { //鑾峰彇浜戠涓婇潰鐨勭綉鍏� - Dictionary<string, GatewayResult> dicDbGateway = HdlGatewayLogic.Current.GetGateWayListFromDataBase(); + Dictionary<string, GatewayResult> dicDbGateway = this.GetGateWayListFromDataBase(); if (dicDbGateway == null) { //濡傛灉缃戠粶涓嶉��,鍒欎篃寰�涓嬭蛋 @@ -2288,7 +2371,7 @@ foreach (var zbway in this.dicGateway.Values) { //鑾峰彇鍓嶅洖鐨勫湪绾跨姸鎬� - dicOldOnline[zbway.GwId] = zbway.GatewayOnlineFlage; + dicOldOnline[zbway.GwId] = this.CheckGatewayOnlineByFlage(zbway); } return dicOldOnline; } @@ -2317,7 +2400,10 @@ if (zbway != null) { //鍒囨崲浣忓畢鏃�,杩欎釜涓滆タ鏈夊彲鑳芥槸null - zbway.GatewayOnlineFlage = online; + if (online == true) + { + zbway.OnlineTime = DateTime.Now; + } UserCenterResourse.DicActionForm[formId]?.GatewayOnlinePush(zbway, online, hadGwOnline); } } -- Gitblit v1.8.0