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;
}
}
}