using System;
|
using System.Collections.Generic;
|
using System.Text;
|
|
namespace HDL_ON.Stan
|
{
|
//应该也不多,就写在这里了
|
|
/// <summary>
|
/// 云端推送枚举
|
/// </summary>
|
public enum CloudPushEnum
|
{
|
A新设备上报 = 1,
|
}
|
|
/// <summary>
|
/// 全局接收云端推送的的逻辑(为了执行速度,尽可能的别加耗时的操作)
|
/// </summary>
|
public class HdlCloudReceiveLogic
|
{
|
#region ■ 变量声明___________________________
|
|
/// <summary>
|
/// 全局接收云端推送的的逻辑
|
/// </summary>
|
private static HdlCloudReceiveLogic m_Current = null;
|
/// <summary>
|
/// 全局接收云端推送的的逻辑
|
/// </summary>
|
public static HdlCloudReceiveLogic Current
|
{
|
get
|
{
|
if (m_Current == null)
|
{
|
m_Current = new HdlCloudReceiveLogic();
|
}
|
return m_Current;
|
}
|
}
|
|
/// <summary>
|
/// 云端接收事件集合
|
/// </summary>
|
private List<CloudReceiveEventClass> ListCloudEvent = new List<CloudReceiveEventClass>();
|
|
#endregion
|
|
#region ■ 全局接收___________________________
|
|
/// <summary>
|
/// 特殊全局接收云端推送的的逻辑(为了执行速度,尽可能的别加耗时的操作 true:执行了特殊处理 false:没有执行特殊处理)
|
/// </summary>
|
/// <param name="topic">整个主题</param>
|
/// <param name="byteData">接收的数据</param>
|
/// <param name="mqttEncryptKey">Mqtt的解密密钥</param>
|
/// <param name="homeIdEncryptKey">住宅倒序的解密密钥</param>
|
public bool CloudOverallMsgReceiveEx(string topic, byte[] byteData, string mqttEncryptKey, string homeIdEncryptKey)
|
{
|
//设备入网上报主题
|
if (topic == $"/user/{Entity.DB_ResidenceData.Instance.CurrentRegion.id}/app/thing/topo/found")
|
{
|
if (string.IsNullOrEmpty(homeIdEncryptKey) == false)
|
{
|
//解密
|
byteData = Securitys.EncryptionService.AesDecryptPayload(byteData, homeIdEncryptKey);
|
}
|
string msgData = Encoding.UTF8.GetString(byteData);
|
//这里特殊,别急着转字符串,先判断主题再转
|
return this.CloudOverallMsgReceiveEx(topic, msgData);
|
}
|
return false;
|
}
|
|
/// <summary>
|
/// 特殊全局接收云端推送的的逻辑(为了执行速度,尽可能的别加耗时的操作 true:执行了特殊处理 false:没有执行特殊处理)
|
/// </summary>
|
/// <param name="topic">整个主题</param>
|
/// <param name="msgData">接收的数据</param>
|
public bool CloudOverallMsgReceiveEx(string topic, string msgData)
|
{
|
//没有任何监听
|
if (ListCloudEvent.Count == 0) { return false; }
|
|
//设备入网上报主题(目前只有红外宝)
|
if (topic == $"/user/{Entity.DB_ResidenceData.Instance.CurrentRegion.id}/app/thing/topo/found")
|
{
|
for (int i = 0; i < this.ListCloudEvent.Count; i++)
|
{
|
//回调事件
|
this.ListCloudEvent[i].CloudReceiveEvent(CloudPushEnum.A新设备上报, msgData);
|
}
|
return true;
|
}
|
return false;
|
}
|
|
#endregion
|
|
#region ■ 添加云端监听_______________________
|
|
/// <summary>
|
/// 添加云端接收事件
|
/// </summary>
|
/// <param name="i_mainKey">标识事件的主键(可以随便填,主要是针对多个界面一起使用的情况)</param>
|
/// <param name="action">(参数1:枚举 参数2:推送消息)</param>
|
public void AddCloudReceiveEvent(string i_mainKey, Action<CloudPushEnum, string> action)
|
{
|
try
|
{
|
var eventClass = new CloudReceiveEventClass();
|
eventClass.MainKey = i_mainKey;
|
eventClass.CloudReceiveEvent = action;
|
this.ListCloudEvent.Add(eventClass);
|
}
|
catch { }
|
}
|
#endregion
|
|
#region ■ 移除云端监听_______________________
|
|
/// <summary>
|
/// 移除云端接收事件
|
/// </summary>
|
/// <param name="i_mainKey">标识事件的主键(可以随便填,主要是针对多个界面一起使用的情况)</param>
|
public void RemoveCloudReceiveEvent(string i_mainKey)
|
{
|
try
|
{
|
for (int i = 0; i < this.ListCloudEvent.Count; i++)
|
{
|
if (this.ListCloudEvent[i].MainKey == i_mainKey)
|
{
|
this.ListCloudEvent.RemoveAt(i);
|
i--;
|
}
|
}
|
}
|
catch { }
|
}
|
|
#endregion
|
|
#region ■ 结构体_____________________________
|
|
/// <summary>
|
/// 云端接收事件类
|
/// </summary>
|
private class CloudReceiveEventClass
|
{
|
/// <summary>
|
/// 标识事件的主键(可以随便填,主要是针对多个界面一起使用的情况)
|
/// </summary>
|
public string MainKey = string.Empty;
|
/// <summary>
|
/// 云端接收事件(参数1:枚举 参数2:推送消息)
|
/// </summary>
|
public Action<CloudPushEnum, string> CloudReceiveEvent = null;
|
}
|
|
#endregion
|
}
|
}
|