From 66a9965c44ecc32a6696abca876ab9d1cd091584 Mon Sep 17 00:00:00 2001 From: gxc <guoxuecheng@guoxuechengdeMacBook-Pro.local> Date: 星期五, 28 二月 2020 15:25:13 +0800 Subject: [PATCH] 2020.2.28 --- ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs | 366 +++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 290 insertions(+), 76 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs index f1c7924..303e827 100755 --- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs +++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs @@ -39,7 +39,7 @@ /// <summary> /// 鍛戒护鍖哄垎 /// </summary> - private Dictionary<string, string> dicCommandDiv = new Dictionary<string, string>(); + private Dictionary<string, ReceiveComandDiv> dicCommandDiv = new Dictionary<string, ReceiveComandDiv>(); #endregion @@ -51,8 +51,8 @@ /// <param name="gatewayId">缃戝叧ID</param> /// <param name="topic">鏁翠釜涓婚</param> /// <param name="reportTopic">涓婃姤鏁版嵁鐨勪富棰�</param> - /// <param name="receiveData">鎺ユ敹鐨勬暟鎹�</param> - public void GatewayOverallMsgReceive(string gatewayId, string topic, string reportTopic, JObject receiveData) + /// <param name="msgData">鎺ユ敹鐨勬暟鎹�</param> + public void GatewayOverallMsgReceive(string gatewayId, string topic, string reportTopic, string msgData) { if (topic == "AppNoLogin") { @@ -65,8 +65,9 @@ UserCenterLogic.ReLoginAgain(UserCenterResourse.UserInfo.Account, false); }); + return; } - else if (topic == "BeingSqueezedOffline") + else if (topic == "ZigbeeGateWayToClient/" + Common.Config.Instance.ConnEmqClientId + "/Push/NotifySqueeze") { HdlThreadLogic.Current.RunMain(() => { @@ -77,6 +78,7 @@ UserCenterLogic.ReLoginAgain(UserCenterResourse.UserInfo.Account, false); }); + return; } else if (topic == "YouIpAndPortNoRecord") { @@ -89,6 +91,24 @@ UserCenterLogic.ReLoginAgain(UserCenterResourse.UserInfo.Account, false); }); + return; + } + else if (topic == "ZigbeeGateWayToClient/" + Common.Config.Instance.Guid + "/Push/Deleted" + || topic == "ZigbeeGateWayToClient/" + Common.Config.Instance.Guid + "/Push/DeletedShareData") + { + if (UserCenterResourse.UserInfo.AuthorityNo == 3) + { + HdlThreadLogic.Current.RunMain(() => + { + //鍒嗕韩鏁版嵁宸茬粡鍙樻洿,璇烽噸鏂扮櫥闄� + string msg = Language.StringByID(R.MyInternationalizationString.uShardDataIsChangedPleaseLoginAgain); + var contr = new ShowMsgControl(ShowMsgType.Tip, msg); + contr.Show(); + + UserCenterLogic.ReLoginAgain(UserCenterResourse.UserInfo.Account, false); + }); + } + return; } try { @@ -97,33 +117,204 @@ //涓嶆槸鑷繁缁戝畾鐨勭綉鍏筹紝鍒欎笉澶勭悊 return; } - //璁惧灞炴�т笂鎶� if (reportTopic == "DeviceStatusReport") { //璁惧灞炴�т笂鎶� - //this.DeviceAttributeReportPush(receiveData); + this.DeviceAttributeReportPush(JObject.Parse(msgData)); } //浼犳劅鍣ㄤ笂鎶� else if (reportTopic == "IASInfoReport") { - //this.SensorDeviceReportPush(receiveData); + this.SensorDeviceReportPush(JObject.Parse(msgData)); } //闂ㄩ攣涓婃姤 else if (topic == gatewayId + "/Alarms/SendAlarmInform") { - this.DoorLockDeviceReportPush(receiveData); + this.DoorLockDeviceReportPush(null); } //閫氳繃澶栭儴鏂瑰紡甯冮槻鎾ら槻鎴愬姛鏃舵姤鍛� else if (topic == gatewayId + "/Security/EnOrWithdrawSucceedReport") { - SecurityEnOrWithdrawSucceedReport(receiveData); + this.SecurityEnOrWithdrawSucceedReport(JObject.Parse(msgData)); + } + //璁惧鍦ㄧ嚎鐘舵�佹洿鏂板弽棣� + else if (reportTopic == "OnlineStatusChange_Respon") + { + this.DeviceOnlineChangePush(JObject.Parse(msgData)); + } + //鎾ら槻 + else if (topic == gatewayId + "/Security/WithdrawMode_Respon") + { + this.RemoveSafetyGarrisonPush(JObject.Parse(msgData)); + } + //甯冮槻 + else if (topic == gatewayId + "/Security/EnableMode_Respon") + { + this.SetSafetyGarrisonPush(JObject.Parse(msgData)); + } + //閫昏緫瑙﹀彂涓婃姤 + else if (topic == gatewayId + "/Logic/Execute_Respon") + { + this.LogicExecutePush(null); + } + //鍦烘櫙瑙﹀彂涓婃姤 + else if (topic == gatewayId + "/Scene/Exec_Respon") + { + this.SceneExecPush(null); } } catch (Exception ex) { //Log鍑哄姏 HdlLogLogic.Current.WriteLog(ex); + } + } + + #endregion + + #region 鈻� 璁惧灞炴�т笂鎶______________________ + + /// <summary> + /// 璁惧灞炴�т笂鎶� + /// </summary> + /// <param name="receiveData"></param> + private void DeviceAttributeReportPush(JObject receiveData) + { + if (this.dicDeviceEvent.Count == 0) + { + //娌℃湁娣诲姞鐩戝惉 + return; + } + var deviceAddr = receiveData.Value<string>("DeviceAddr"); + var deviceEpoint = receiveData.Value<int>("Epoint"); + + var tempDevice = new CommonDevice { DeviceAddr = deviceAddr, DeviceEpoint = deviceEpoint }; + tempDevice.DeviceStatusReport = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.DeviceStatusReportData>(receiveData["Data"].ToString()); + + this.DeviceReportPush(tempDevice, ReceiveComandDiv.A璁惧灞炴�т笂鎶�); + } + + #endregion + + #region 鈻� 浼犳劅鍣ㄤ笂鎶________________________ + + /// <summary> + /// 浼犳劅鍣ㄨ澶囦笂鎶� + /// </summary> + /// <param name="receiveData"></param> + private void SensorDeviceReportPush(JObject receiveData) + { + var ias = new IASZone() { DeviceAddr = receiveData.Value<string>("DeviceAddr"), DeviceEpoint = receiveData.Value<int>("Epoint") }; + ias.iASInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<IASZone.IASInfoData>(receiveData["Data"].ToString()); + + //濡傛灉娌℃湁娣诲姞鍏ュ畨闃� + if (HdlSafeguardLogic.Current.GetZoneIdByIASZone(ias) != -1) + { + //淇濆瓨瀹夐槻鎶ヨ淇℃伅鍒版湰鍦� + HdlAlarmsLogic.Current.SaveSafeguardAlarmInfo(ias); + } + + this.DeviceReportPush(ias, ReceiveComandDiv.A浼犳劅鍣ㄤ笂鎶�); + + //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� + this.ShowHadNewMessageAppeal(); + } + + #endregion + + #region 鈻� 闂ㄩ攣涓婃姤___________________________ + + /// <summary> + /// 闂ㄩ攣涓婃姤 + /// </summary> + /// <param name="receiveData"></param> + private void DoorLockDeviceReportPush(JObject receiveData) + { + //淇濆瓨闂ㄩ攣淇℃伅鍒版湰鍦� + //HdlAlarmsLogic.Current.SaveDoorLockAlarmInfo(receiveData); + + //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� + this.ShowHadNewMessageAppeal(); + } + + #endregion + + #region 鈻� 璁惧鍦ㄧ嚎鐘舵�佹洿鏂板弽棣坃______________ + + /// <summary> + /// 璁惧鍦ㄧ嚎鐘舵�佹洿鏂板弽棣� + /// </summary> + /// <param name="receiveData"></param> + private void DeviceOnlineChangePush (JObject receiveData) + { + if (this.dicDeviceEvent.Count == 0) + { + //娌℃湁娣诲姞鐩戝惉 + return; + } + var tempDevice = new CommonDevice() { DeviceAddr = receiveData.Value<string>("DeviceAddr"), DeviceEpoint = receiveData.Value<int>("Epoint") }; + tempDevice.IsOnline = Convert.ToInt32(receiveData["Data"]["IsOnline"].ToString()); + + this.DeviceReportPush(tempDevice, ReceiveComandDiv.A璁惧鍦ㄧ嚎涓婃姤); + } + + #endregion + + #region 鈻� 甯冮槻_______________________________ + + /// <summary> + /// 甯冮槻鎺ㄩ�� + /// </summary> + /// <param name="receiveData"></param> + private void SetSafetyGarrisonPush(JObject receiveData) + { + var data = Newtonsoft.Json.JsonConvert.DeserializeObject<Safeguard.EnableModeResponseData>(receiveData["Data"].ToString()); + if (data.Result == 0) + { + var garrison = GarrisonMode.None; + //鍦ㄥ甯冮槻 + if (data.ModeId == 1) { garrison = GarrisonMode.AtHome; } + //绂诲甯冮槻 + else if (data.ModeId == 2) { garrison = GarrisonMode.RemoveHome; } + else { return; } + + //淇濆瓨鎶ヨ淇℃伅鐒跺悗鎺ㄩ�佸埌鐣岄潰涓� + HdlAlarmsLogic.Current.SaveSafeguardAlarmInfo(garrison); + if (UserCenterResourse.DicActionForm.ContainsKey("SafetyManagementMainForm") == true) + { + //鎺ㄩ�� + var form = (Safety.SafetyManagementMainForm)UserCenterResourse.DicActionForm["SafetyManagementMainForm"]; + form?.GarrisonModePush(garrison); + } + //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� + this.ShowHadNewMessageAppeal(); + } + } + + #endregion + + #region 鈻� 鎾ら槻_______________________________ + + /// <summary> + /// 鎾ら槻鎺ㄩ�� + /// </summary> + /// <param name="receiveData"></param> + private void RemoveSafetyGarrisonPush(JObject receiveData) + { + var data = Newtonsoft.Json.JsonConvert.DeserializeObject<Safeguard.WithdrawModeResponseData>(receiveData["Data"].ToString()); + if (data.Result == 0) + { + //淇濆瓨鎶ヨ淇℃伅鐒跺悗鎺ㄩ�佸埌鐣岄潰涓� + HdlAlarmsLogic.Current.SaveSafeguardAlarmInfo(GarrisonMode.RemoveGarrison); + if (UserCenterResourse.DicActionForm.ContainsKey("SafetyManagementMainForm") == true) + { + //鎺ㄩ�� + var form = (Safety.SafetyManagementMainForm)UserCenterResourse.DicActionForm["SafetyManagementMainForm"]; + form?.GarrisonModePush(GarrisonMode.RemoveGarrison); + } + //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� + this.ShowHadNewMessageAppeal(); } } @@ -162,7 +353,15 @@ else if (data.OperationWay == 1) { appendText = "(" + Language.StringByID(R.MyInternationalizationString.uPanelOperation) + ")"; } //淇濆瓨鎶ヨ淇℃伅鐒跺悗鎺ㄩ�佸埌鐣岄潰涓� - HdlAlarmsLogic.Current.SaveSafeguardAlarmInfo(garrison, appendText, true); + HdlAlarmsLogic.Current.SaveSafeguardAlarmInfo(garrison, appendText); + if (UserCenterResourse.DicActionForm.ContainsKey("SafetyManagementMainForm") == true) + { + //鎺ㄩ�� + var form = (Safety.SafetyManagementMainForm)UserCenterResourse.DicActionForm["SafetyManagementMainForm"]; + form?.GarrisonModePush(garrison); + } + //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� + this.ShowHadNewMessageAppeal(); } /// <summary> @@ -186,62 +385,39 @@ #endregion - #region 鈻� 璁惧灞炴�т笂鎶______________________ + #region 鈻� 閫昏緫瑙﹀彂涓婃姤_______________________ /// <summary> - /// 璁惧灞炴�т笂鎶� + /// 閫昏緫瑙﹀彂涓婃姤 /// </summary> /// <param name="receiveData"></param> - private void DeviceAttributeReportPush(JObject receiveData) + private void LogicExecutePush(JObject receiveData) { - var deviceAddr = receiveData.Value<string>("DeviceAddr"); - var deviceEpoint = receiveData.Value<int>("Epoint"); + //鐩墠涓嶅鐞嗛�昏緫涓婃姤鍐呭 - var tempDevice = new CommonDevice { DeviceAddr = deviceAddr, DeviceEpoint = deviceEpoint }; - tempDevice.DeviceStatusReport = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.DeviceStatusReportData>(receiveData["Data"].ToString()); - - this.DeviceReportPush(tempDevice, "DeviceStatusReport"); + //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� + this.ShowHadNewMessageAppeal(); } #endregion - #region 鈻� 浼犳劅鍣ㄤ笂鎶________________________ + #region 鈻� 鍦烘櫙瑙﹀彂涓婃姤_______________________ /// <summary> - /// 浼犳劅鍣ㄨ澶囦笂鎶� + /// 鍦烘櫙瑙﹀彂涓婃姤 /// </summary> /// <param name="receiveData"></param> - private void SensorDeviceReportPush(JObject receiveData) + private void SceneExecPush(JObject receiveData) { - var ias = new IASZone() { DeviceAddr = receiveData.Value<string>("DeviceAddr"), DeviceEpoint = receiveData.Value<int>("Epoint") }; - ias.iASInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<IASZone.IASInfoData>(receiveData["Data"].ToString()); + //鐩墠涓嶅鐞嗗満鏅笂鎶ュ唴瀹� - //濡傛灉娌℃湁娣诲姞鍏ュ畨闃� - if (HdlSafeguardLogic.Current.GetZoneIdByIASZone(ias) == -1) - { - } - else - { - //淇濆瓨瀹夐槻鎶ヨ淇℃伅鍒版湰鍦� - HdlAlarmsLogic.Current.SaveSafeguardAlarmInfo(ias); - } + //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� + this.ShowHadNewMessageAppeal(); } #endregion - #region 鈻� 闂ㄩ攣涓婃姤___________________________ - /// <summary> - /// 闂ㄩ攣涓婃姤 - /// </summary> - /// <param name="receiveData"></param> - private void DoorLockDeviceReportPush(JObject receiveData) - { - //淇濆瓨闂ㄩ攣淇℃伅鍒版湰鍦� - HdlAlarmsLogic.Current.SaveDoorLockAlarmInfo(receiveData); - } - - #endregion #region 鈻� 娣诲姞璁惧浜嬩欢_______________________ @@ -249,12 +425,20 @@ /// 娣诲姞鑾峰彇璁惧灞炴�х殑浜嬩欢(鎺ㄩ�佸凡缁忓己鍒舵寚瀹氳繍琛屼簬涓荤嚎绋嬶紝灞炴�т笂鎶ョ殑瀵硅薄锛歞evice.DeviceStatusReport) /// </summary> /// <param name="mainKeys">鏍囪瘑浜嬩欢鐨勪富閿�(鍙互闅忎究濉�,涓昏鏄拡瀵瑰涓晫闈竴璧蜂娇鐢ㄧ殑鎯呭喌)</param> - /// <param name="comand">鍛戒护鍖哄垎,姣斿锛欴eviceStatusReport,IASInfoReport绛夌瓑</param> - /// <param name="action">褰撴帴鏀跺埌缃戝叧鍥炲涔嬪悗鐨勫洖璋冨嚱鏁�,灞炴�т笂鎶ョ殑瀵硅薄锛歞evice.DeviceStatusReport</param> - public void AddAttributeEvent(string mainKeys, string comand, Action<CommonDevice> action) + /// <param name="comand">鍛戒护鍖哄垎</param> + /// <param name="action"> + /// <para>褰撴帴鏀跺埌缃戝叧鍥炲涔嬪悗鐨勫洖璋冨嚱鏁�</para> + /// <para>璁惧灞炴�т笂鎶ョ殑瀵硅薄锛歞evice.DeviceStatusReport</para> + /// <para>浼犳劅鍣ㄤ笂鎶ョ殑瀵硅薄锛歩as.iASInfo</para> + /// <para>璁惧鍦ㄧ嚎涓婃姤鐨勫璞★細device.IsOnline</para></param> + public void AddAttributeEvent(string mainKeys, ReceiveComandDiv comand, Action<CommonDevice> action) { lock (this.dicDeviceEvent) { + if (this.dicDeviceEvent.ContainsKey(mainKeys) == true) + { + this.RemoveEvent(mainKeys); + } this.dicDeviceEvent[mainKeys] = action; this.dicCommandDiv[mainKeys] = comand; } @@ -305,27 +489,26 @@ #endregion - #region 鈻� 璁惧涓婃姤鎺ㄩ�乢______________________ + #region 鈻� 涓�鑸柟娉昣__________________________ /// <summary> /// 璁惧涓婃姤鎺ㄩ�� /// </summary> /// <param name="common"></param> - /// <param name="typeTag"></param> - private void DeviceReportPush(CommonDevice common, string reportTopic) + /// <param name="comand"></param> + private void DeviceReportPush(CommonDevice common, ReceiveComandDiv comand) { + if (this.dicDeviceEvent.Count == 0) + { + //娌℃湁娣诲姞鐩戝惉 + return; + } lock (this.dicDeviceEvent) { - if (this.dicDeviceEvent.Count == 0) - { - //娌℃湁娣诲姞鐩戝惉 - return; - } - var list = new List<Action<CommonDevice>>(); foreach (string keys in this.dicDeviceEvent.Keys) { - if (this.dicCommandDiv[keys] != reportTopic) + if (this.dicCommandDiv[keys] != comand) { //鍛戒护鍖哄垎涓嶄竴鑷达紝鍒欎笉璋冪敤鍥炶皟鍑芥暟 continue; @@ -334,29 +517,21 @@ list.Add(this.dicDeviceEvent[keys]); } //鏈夊彲鑳藉湪鍥炶皟鍑芥暟涓Щ闄や簡浜嬩欢锛屽鑷存姤閿欙紝鎵�浠ュ厛鏀堕泦锛屽啀璋冪敤 - Application.RunOnMainThread(() => + foreach (var action in list) { - foreach (var action in list) + try { - try - { - action?.Invoke(common); - } - catch (Exception ex) - { - //Log鍑哄姏 - string msg = "褰撳墠婵�娲荤殑鐣岄潰[" + UserCenterResourse.NowActionFormID + "]"; - HdlLogLogic.Current.WriteLog(-1, msg); - HdlLogLogic.Current.WriteLog(ex); - } + action?.Invoke(common); } - }); + catch (Exception ex) + { + //Log鍑哄姏 + string msg = "鎺ㄩ�侀敊璇�! 褰撳墠婵�娲荤殑鐣岄潰[" + UserCenterResourse.NowActionFormID + "]"; + HdlLogLogic.Current.WriteLog(ex, msg); + } + } } } - - #endregion - - #region 鈻� 涓�鑸柟娉昣__________________________ /// <summary> /// 鏄惁瀛樺湪鎸囧畾鐨勪簨浠� @@ -368,6 +543,45 @@ return this.dicCommandDiv.ContainsKey(mainkeys); } + /// <summary> + /// 鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� + /// </summary> + private void ShowHadNewMessageAppeal() + { + //鏈夋柊娑堟伅(鐗规晥杩樺湪鏃�,涓嶉渶瑕佸啀澶勭悊) + if (ControlCommonResourse.HadNewMessage == false) + { + HdlThreadLogic.Current.RunMain(() => + { + for (int i = 0; i < ControlCommonResourse.listMessageManaContr.Count; i++) + { + //鏄剧ず瑙掓爣鐗规晥 + ControlCommonResourse.listMessageManaContr[i].IsSelected = true; + } + ControlCommonResourse.HadNewMessage = true; + }); + } + } + #endregion } + + /// <summary> + /// 鎺ユ敹鍛戒护鍖哄垎 + /// </summary> + public enum ReceiveComandDiv + { + /// <summary> + /// 璁惧灞炴�т笂鎶� + /// </summary> + A璁惧灞炴�т笂鎶� = 1, + /// <summary> + /// 浼犳劅鍣ㄤ笂鎶� + /// </summary> + A浼犳劅鍣ㄤ笂鎶� = 2, + /// <summary> + /// 璁惧鍦ㄧ嚎涓婃姤 + /// </summary> + A璁惧鍦ㄧ嚎涓婃姤 = 3 + } } -- Gitblit v1.8.0