using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Paho.MqttDotnet { /// /// 表示Mqtt选项抽象 /// /// unsafe abstract class MqttOptionsBase : IMqttOptions where TOption : IMQTTAsync_options, new() { /// /// 完成委托 /// private OptionCompletedHandler complectedAction; /// /// 异常委托 /// private OptionExceptionHandler exceptionAction; /// /// 执行成功委托 /// private readonly MQTTAsync_onSuccess onSuccess; /// /// 执行失败委托 /// private readonly MQTTAsync_onFailure onFailure; /// /// Mqtt选项抽象 /// public MqttOptionsBase() { this.onSuccess = new MQTTAsync_onSuccess(this.MQTTAsync_onSuccess); this.onFailure = new MQTTAsync_onFailure(this.MQTTAsync_onFailure); } /// /// 执行成功 /// /// 上下文 /// 数据 protected abstract void MQTTAsync_onSuccess(IntPtr context, void* successData); /// /// 执行失败 /// /// 上下文 /// 数据 protected abstract void MQTTAsync_onFailure(IntPtr context, MQTTAsync_failureData* failureData); /// /// 触发执行完成 /// /// 上下文 /// 结果 protected void RaiseOnCompleted(IntPtr context, object value) { if (this.complectedAction != null) { var taskId = context.ToInt32(); this.complectedAction.Invoke(taskId, value); } } /// /// 触发执行异常 /// /// 上下文 /// 异常 protected void RaiseOnException(IntPtr context, Exception ex) { if (this.exceptionAction != null) { var taskId = context.ToInt32(); this.exceptionAction.Invoke(taskId, ex); } } /// /// 转换为结构体 /// /// 任务id /// 要合并的结构 /// public TOption ToStruct(int taskId, TOption opt) { opt.SetContext(new IntPtr(taskId)); opt.SetCallbacks(this.onSuccess, this.onFailure); return opt; } /// /// 转换为结构体 /// /// 任务id /// public TOption ToStruct(int taskId) { var opt = new TOption(); opt.Init(); opt.SetContext(new IntPtr(taskId)); opt.SetCallbacks(this.onSuccess, this.onFailure); return opt; } /// /// 设置完成的委托 /// /// void IMqttOptions.OnCompleted(OptionCompletedHandler action) { this.complectedAction = action; } /// /// 设置异常委托 /// /// void IMqttOptions.OnException(OptionExceptionHandler action) { this.exceptionAction = action; } } }