using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Reflection; using System.ComponentModel; namespace Paho.MqttDotnet { /// /// 表示mqtt客户端异常 /// public class MqttException : Exception { /// /// 保存错误码的提示消息 /// private static readonly IDictionary errorMessages; /// /// 获取mqtt错误码 /// public MqttError Error { get; private set; } /// /// 静态构造器 /// static MqttException() { var type = typeof(MqttError); var q = from e in Enum.GetValues(type).Cast() let field = type.GetField(e.ToString()) let attribute = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute select new { key = e, value = attribute.Description }; MqttException.errorMessages = q.ToDictionary(kv => kv.key, kv => kv.value); } /// /// mqtt客户端异常 /// /// 异常码 /// public MqttException(MqttError error) : base(MqttException.GetEerrorMessage(error)) { this.Error = error; } /// /// mqtt客户端异常 /// /// 异常码 /// public MqttException(int error) : this((MqttError)error) { } /// /// 获取错误信息 /// /// /// /// private static string GetEerrorMessage(MqttError error) { var message = default(string); if (MqttException.errorMessages.TryGetValue(error, out message) == false) { throw new ArgumentOutOfRangeException(); } return message; } } }