From 16604a593202f2f87adf71abd57d036fe7da3b52 Mon Sep 17 00:00:00 2001 From: 黄学彪 <hxb@hdlchina.com.cn> Date: 星期一, 18 十一月 2019 10:39:42 +0800 Subject: [PATCH] 同步了全部的代码 --- ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs | 255 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 247 insertions(+), 8 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs index 5565855..f1c7924 100755 --- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs +++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using Newtonsoft.Json.Linq; +using ZigBee.Device; namespace Shared.Phone.UserCenter { @@ -10,15 +11,48 @@ /// </summary> public class HdlGatewayReceiveLogic { + #region 鈻� 鍙橀噺澹版槑___________________________ + + /// <summary> + /// 鍏ㄥ眬鎺ユ敹缃戝叧鎺ㄩ�佺殑鐨勯�昏緫 + /// </summary> + private static HdlGatewayReceiveLogic m_Current = null; + /// <summary> + /// 鍏ㄥ眬鎺ユ敹缃戝叧鎺ㄩ�佺殑鐨勯�昏緫 + /// </summary> + public static HdlGatewayReceiveLogic Current + { + get + { + if (m_Current == null) + { + m_Current = new HdlGatewayReceiveLogic(); + } + return m_Current; + } + } + + /// <summary> + /// 璁惧鎺ㄩ�佷簨浠堕泦鍚� + /// </summary> + private Dictionary<string, Action<CommonDevice>> dicDeviceEvent = new Dictionary<string, Action<CommonDevice>>(); + /// <summary> + /// 鍛戒护鍖哄垎 + /// </summary> + private Dictionary<string, string> dicCommandDiv = new Dictionary<string, string>(); + + #endregion + #region 鈻� 鍏ㄥ眬鎺ユ敹___________________________ /// <summary> /// 鍏ㄥ眬鎺ユ敹缃戝叧鎺ㄩ�佺殑鐨勯�昏緫(涓轰簡鎵ц閫熷害,灏藉彲鑳界殑鍒姞鑰楁椂鐨勬搷浣�) /// </summary> /// <param name="gatewayId">缃戝叧ID</param> - /// <param name="topic">涓婚</param> + /// <param name="topic">鏁翠釜涓婚</param> + /// <param name="reportTopic">涓婃姤鏁版嵁鐨勪富棰�</param> /// <param name="receiveData">鎺ユ敹鐨勬暟鎹�</param> - public static void GatewayOverallMsgReceive(string gatewayId, string topic, JObject receiveData) + public void GatewayOverallMsgReceive(string gatewayId, string topic, string reportTopic, JObject receiveData) { if (topic == "AppNoLogin") { @@ -44,7 +78,18 @@ UserCenterLogic.ReLoginAgain(UserCenterResourse.UserInfo.Account, false); }); } + else if (topic == "YouIpAndPortNoRecord") + { + HdlThreadLogic.Current.RunMain(() => + { + //鎮ㄥ綋鍓嶇殑IP鍙婄鍙e湪浜戠涓嶅瓨鍦�,璇烽噸鏂扮櫥褰�! + string msg = Language.StringByID(R.MyInternationalizationString.uYouIpAndPortNoRecord); + var contr = new ShowMsgControl(ShowMsgType.Tip, msg); + contr.Show(); + UserCenterLogic.ReLoginAgain(UserCenterResourse.UserInfo.Account, false); + }); + } try { if (HdlGatewayLogic.Current.IsGatewayExist(gatewayId) == false) @@ -52,12 +97,22 @@ //涓嶆槸鑷繁缁戝畾鐨勭綉鍏筹紝鍒欎笉澶勭悊 return; } - //闂ㄩ攣涓婃姤 - if (topic == gatewayId + "/Alarms/SendAlarmInform") - { - //淇濆瓨闂ㄩ攣鎶ヨ淇℃伅鍒版湰鍦� - HdlAlarmsLogic.Current.SaveDoorLockAlarmInfo(receiveData); + //璁惧灞炴�т笂鎶� + if (reportTopic == "DeviceStatusReport") + { + //璁惧灞炴�т笂鎶� + //this.DeviceAttributeReportPush(receiveData); + } + //浼犳劅鍣ㄤ笂鎶� + else if (reportTopic == "IASInfoReport") + { + //this.SensorDeviceReportPush(receiveData); + } + //闂ㄩ攣涓婃姤 + else if (topic == gatewayId + "/Alarms/SendAlarmInform") + { + this.DoorLockDeviceReportPush(receiveData); } //閫氳繃澶栭儴鏂瑰紡甯冮槻鎾ら槻鎴愬姛鏃舵姤鍛� else if (topic == gatewayId + "/Security/EnOrWithdrawSucceedReport") @@ -80,7 +135,7 @@ /// 閫氳繃澶栭儴鏂瑰紡甯冮槻鎾ら槻 /// </summary> /// <param name="receiveData">鎺ユ敹鐨勬暟鎹�</param> - private static void SecurityEnOrWithdrawSucceedReport(JObject receiveData) + private void SecurityEnOrWithdrawSucceedReport(JObject receiveData) { var data = Newtonsoft.Json.JsonConvert.DeserializeObject<SecurityEnOrWithdrawResult>(receiveData["Data"].ToString()); if (data.EnOrWithdraw == -1 || data.ModeId == -1 || data.OperationWay == -1) @@ -130,5 +185,189 @@ } #endregion + + #region 鈻� 璁惧灞炴�т笂鎶______________________ + + /// <summary> + /// 璁惧灞炴�т笂鎶� + /// </summary> + /// <param name="receiveData"></param> + private void DeviceAttributeReportPush(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"); + } + + #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) + { + } + else + { + //淇濆瓨瀹夐槻鎶ヨ淇℃伅鍒版湰鍦� + HdlAlarmsLogic.Current.SaveSafeguardAlarmInfo(ias); + } + } + + #endregion + + #region 鈻� 闂ㄩ攣涓婃姤___________________________ + + /// <summary> + /// 闂ㄩ攣涓婃姤 + /// </summary> + /// <param name="receiveData"></param> + private void DoorLockDeviceReportPush(JObject receiveData) + { + //淇濆瓨闂ㄩ攣淇℃伅鍒版湰鍦� + HdlAlarmsLogic.Current.SaveDoorLockAlarmInfo(receiveData); + } + + #endregion + + #region 鈻� 娣诲姞璁惧浜嬩欢_______________________ + + /// <summary> + /// 娣诲姞鑾峰彇璁惧灞炴�х殑浜嬩欢(鎺ㄩ�佸凡缁忓己鍒舵寚瀹氳繍琛屼簬涓荤嚎绋嬶紝灞炴�т笂鎶ョ殑瀵硅薄锛歞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) + { + lock (this.dicDeviceEvent) + { + this.dicDeviceEvent[mainKeys] = action; + this.dicCommandDiv[mainKeys] = comand; + } + } + + #endregion + + #region 鈻� 绉婚櫎璁惧鐩戝惉_______________________ + + /// <summary> + /// 绉婚櫎浜嬩欢 + /// </summary> + /// <param name="mainKeys">鏍囪瘑浜嬩欢鐨勪富閿�(鍙互闅忎究濉�,涓昏鏄拡瀵瑰涓晫闈竴璧蜂娇鐢ㄧ殑鎯呭喌)</param> + public void RemoveEvent(string mainKeys) + { + lock (this.dicDeviceEvent) + { + if (this.dicDeviceEvent.ContainsKey(mainKeys) == true) + { + var action = this.dicDeviceEvent[mainKeys]; + this.dicDeviceEvent.Remove(mainKeys); + this.dicCommandDiv.Remove(mainKeys); + + action = null; + } + } + } + + /// <summary> + /// 绉婚櫎鍏ㄩ儴鐨勪簨浠� + /// </summary> + public void RemoveAllEvent() + { + lock (this.dicDeviceEvent) + { + var list = new HashSet<string>(); + foreach (var keys in this.dicDeviceEvent.Keys) + { + list.Add(keys); + } + foreach (var keys in list) + { + //闇�瑕佹參鎱竴涓竴涓殑閲婃斁Action,鍚 + this.RemoveEvent(keys); + } + } + } + + #endregion + + #region 鈻� 璁惧涓婃姤鎺ㄩ�乢______________________ + + /// <summary> + /// 璁惧涓婃姤鎺ㄩ�� + /// </summary> + /// <param name="common"></param> + /// <param name="typeTag"></param> + private void DeviceReportPush(CommonDevice common, string reportTopic) + { + 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) + { + //鍛戒护鍖哄垎涓嶄竴鑷达紝鍒欎笉璋冪敤鍥炶皟鍑芥暟 + continue; + } + //鍛戒护鍖哄垎涓�鑷存椂锛屽垯璋冪敤鍥炶皟鍑芥暟 + list.Add(this.dicDeviceEvent[keys]); + } + //鏈夊彲鑳藉湪鍥炶皟鍑芥暟涓Щ闄や簡浜嬩欢锛屽鑷存姤閿欙紝鎵�浠ュ厛鏀堕泦锛屽啀璋冪敤 + Application.RunOnMainThread(() => + { + foreach (var action in list) + { + try + { + action?.Invoke(common); + } + catch (Exception ex) + { + //Log鍑哄姏 + string msg = "褰撳墠婵�娲荤殑鐣岄潰[" + UserCenterResourse.NowActionFormID + "]"; + HdlLogLogic.Current.WriteLog(-1, msg); + HdlLogLogic.Current.WriteLog(ex); + } + } + }); + } + } + + #endregion + + #region 鈻� 涓�鑸柟娉昣__________________________ + + /// <summary> + /// 鏄惁瀛樺湪鎸囧畾鐨勪簨浠� + /// </summary> + /// <param name="mainkeys"></param> + /// <returns></returns> + public bool IsEsixt(string mainkeys) + { + return this.dicCommandDiv.ContainsKey(mainkeys); + } + + #endregion } } -- Gitblit v1.8.0