From 587c36e27131f2d028fcabc13b296a8de7470034 Mon Sep 17 00:00:00 2001
From: gxc <guoxuecheng@guoxuechengdeMacBook-Pro.local>
Date: 星期三, 08 一月 2020 08:59:19 +0800
Subject: [PATCH] 2019.1.8
---
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAttributeLogic.cs | 227 +++++++++++++++++++-------------------------------------
1 files changed, 76 insertions(+), 151 deletions(-)
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAttributeLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAttributeLogic.cs
index d56af50..0c42986 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAttributeLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAttributeLogic.cs
@@ -7,18 +7,18 @@
namespace Shared.Phone.UserCenter
{
/// <summary>
- /// 璁惧灞炴�т笂鎶ョ殑閫昏緫绫�
+ /// 璁惧灞炴�х殑閫昏緫绫�
/// </summary>
- public class HdlDeviceAttributeLogic : ZigBee.Common.IStatus
+ public class HdlDeviceAttributeLogic
{
#region 鈻� 鍙橀噺澹版槑___________________________
/// <summary>
- /// 灞炴�т笂鎶ョ殑閫昏緫
+ /// 灞炴�х殑閫昏緫
/// </summary>
private static HdlDeviceAttributeLogic m_Current = null;
/// <summary>
- /// 灞炴�т笂鎶ョ殑閫昏緫
+ /// 灞炴�х殑閫昏緫
/// </summary>
public static HdlDeviceAttributeLogic Current
{
@@ -36,160 +36,85 @@
}
}
- /// <summary>
- /// 浜嬩欢闆嗗悎
- /// </summary>
- private Dictionary<string, Action<CommonDevice>> dicEvent = new Dictionary<string, Action<CommonDevice>>();
- /// <summary>
- /// 鍛戒护鍖哄垎
- /// </summary>
- private Dictionary<string, string> dicCommandDiv = new Dictionary<string, string>();
-
#endregion
- #region 鈻� 娣诲姞浜嬩欢___________________________
+ #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.dicEvent)
- {
- if (this.dicEvent.Count == 0)
- {
- ZbGateway.StatusList.Add(this);
- }
- this.dicEvent[mainKeys] = action;
- this.dicCommandDiv[mainKeys] = comand;
- }
- }
-
- #endregion
-
- #region 鈻� 绉婚櫎鐩戝惉___________________________
-
- /// <summary>
- /// 绉婚櫎浜嬩欢
- /// </summary>
- /// <param name="mainKeys">鏍囪瘑浜嬩欢鐨勪富閿�(鍙互闅忎究濉�,涓昏鏄拡瀵瑰涓晫闈竴璧蜂娇鐢ㄧ殑鎯呭喌)</param>
- public void RemoveEvent(string mainKeys)
- {
- lock (this.dicEvent)
- {
- if (this.dicEvent.ContainsKey(mainKeys) == true)
- {
- var action = this.dicEvent[mainKeys];
- this.dicEvent.Remove(mainKeys);
- this.dicCommandDiv.Remove(mainKeys);
-
- action = null;
- }
- if (this.dicEvent.Count == 0)
- {
- ZbGateway.StatusList.Remove(this);
- }
- }
- }
-
- /// <summary>
- /// 绉婚櫎鍏ㄩ儴鐨勪簨浠�
- /// </summary>
- public void RemoveAllEvent()
- {
- lock (this.dicEvent)
- {
- var list = new HashSet<string>();
- foreach (var keys in this.dicEvent.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>
- public void DeviceInfoChange(CommonDevice common, string typeTag)
- {
- if (common == null || string.IsNullOrEmpty(common.DeviceAddr) == true)
- {
- //鎴戜篃涓嶇煡閬撹繖鏈夋病鏈夊彲鑳�
- return;
- }
-
- lock (this.dicEvent)
- {
- var list = new List<Action<CommonDevice>>();
- foreach (string keys in this.dicEvent.Keys)
- {
- if (this.dicCommandDiv[keys] != typeTag)
- {
- //鍛戒护鍖哄垎涓嶄竴鑷达紝鍒欎笉璋冪敤鍥炶皟鍑芥暟
- continue;
- }
- //鍛戒护鍖哄垎涓�鑷存椂锛屽垯璋冪敤鍥炶皟鍑芥暟
- list.Add(this.dicEvent[keys]);
- }
- HdlThreadLogic.Current.RunMain(() =>
- {
- //鏈夊彲鑳藉湪鍥炶皟鍑芥暟涓Щ闄や簡浜嬩欢锛屽鑷存姤閿欙紝鎵�浠ュ厛鏀堕泦锛屽啀璋冪敤
- foreach (var action in list)
- {
- action?.Invoke(common);
- }
- list.Clear();
- });
- }
- }
-
- /// <summary>
- /// 涓嶄娇鐢�
- /// </summary>
- /// <param name="common"></param>
- public void Changed(CommonDevice common)
- {
- }
-
- /// <summary>
- /// 涓嶄娇鐢�
- /// </summary>
- public void ChangedILogicStatus(ZigBee.Device.Logic logic)
- {
- }
-
- /// <summary>
- /// 涓嶄娇鐢�
- /// </summary>
- public void ChangedISceneStatus(Scene scene)
- {
- }
- #endregion
-
- #region 鈻� 涓�鑸柟娉昣__________________________
-
- /// <summary>
- /// 鏄惁瀛樺湪鎸囧畾鐨勪簨浠�
- /// </summary>
- /// <param name="mainkeys"></param>
+ /// <param name="device">璁惧瀵硅薄</param>
+ /// <param name="clusterId">闀濱D</param>
+ /// <param name="attributeId">灞炴�D</param>
+ /// <param name="attributeDataType">鏁版嵁绫诲瀷</param>
+ /// <param name="attributeData">闇�瑕佸啓鍏ョ殑鏁版嵁</param>
/// <returns></returns>
- public bool IsEsixt(string mainkeys)
+ public async System.Threading.Tasks.Task<CommonDevice.SetWritableValueResponAllData> WriteDeviceAttribute(CommonDevice device, int clusterId, int attributeId, int attributeDataType, int attributeData)
{
- return this.dicCommandDiv.ContainsKey(mainkeys);
+ var MyGateway = device.Gateway;
+ if (MyGateway == null)
+ {
+ return null;
+ }
+
+ CommonDevice.SetWritableValueResponAllData d = null;
+ Action<string, string> action = (topic, message) =>
+ {
+ var gatewayID = topic.Split('/')[0];
+ var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
+
+ if (topic == gatewayID + "/" + "Error_Respon")
+ {
+ var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ZbGateway.ErrorResponData>(jobject["Data"].ToString());
+ if (temp == null)
+ {
+ d = new CommonDevice.SetWritableValueResponAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" };
+ }
+ else
+ {
+ d = new CommonDevice.SetWritableValueResponAllData { errorResponData = temp, errorMessageBase = HdlCheckLogic.Current.CheckCommonErrorCode(temp.Error) };
+ }
+ }
+
+ if (topic == gatewayID + "/" + "SetWritableValue_Respon")
+ {
+ var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.SetWritableValueResponData>(jobject["Data"].ToString());
+ if (tempData == null)
+ {
+ d = new CommonDevice.SetWritableValueResponAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" };
+ }
+ else
+ {
+ d = new CommonDevice.SetWritableValueResponAllData { setWritableValueResponData = tempData };
+ }
+ }
+ };
+ MyGateway.Actions += action;
+ try
+ {
+ var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr", device.DeviceAddr }, { "Epoint", device.DeviceEpoint }, { "Cluster_ID", clusterId }, { "Command", 120 } };
+ var data = new Newtonsoft.Json.Linq.JObject { { "Undivided", 0 }, { "AttributeId", attributeId }, { "AttributeDataType", attributeDataType }, { "AttributeData", attributeData } };
+ jObject.Add("Data", data);
+ MyGateway.Send("SetWritableValue", jObject.ToString());
+ }
+ catch { }
+
+ var timeOut = 0;
+ while (timeOut <= 30)
+ {
+ await System.Threading.Tasks.Task.Delay(100);
+ if (d != null)
+ {
+ break;
+ }
+ timeOut++;
+ }
+ if (timeOut > 30 && d == null)
+ {
+ d = new CommonDevice.SetWritableValueResponAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" };
+ }
+ MyGateway.Actions -= action;
+ return d;
}
#endregion
--
Gitblit v1.8.0