From 4ce5177289b1d34e467de9d8790836559cc5a09e Mon Sep 17 00:00:00 2001
From: 黄学彪 <hxb@hdlchina.com.cn>
Date: 星期一, 18 十一月 2019 18:06:28 +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