CZGL.AliIoTClient 内部预置了 7 个委托事件,它们会在程序运行的不同生命周期节点被自动触发。这 7 个事件完整覆盖了从属性设置、服务调用到连接断开等核心交互场景,一旦理解了这些事件,你基本就能掌控客户端的行为脉络与回调机制。

1)7 个委托事件
先逐一列出,每个事件都有明确的职责与触发时机:
/// /// 服务器属性设置/// public PublishPropertyEventHandler PubPropertyEventHandler;/// /// 服务调用/// public PublishServiceEventHandler PubServiceEventHandler;/// /// 收到其它Topic时触发/// public PublishCommonEventHandler PubCommonEventHandler;/// /// 当 QOS=1或2时,收到订阅触发/// public uPLibrary.Networking.M2Mqtt.MqttClient.MqttMsgPublishedEventHandler PubedEventHandler;/// /// 向服务器发布 Topic 时/// public uPLibrary.Networking.M2Mqtt.MqttClient.MqttMsgSubscribedEventHandler SubedEventHandler;/// /// 向服务器发布 Topic 失败时/// public uPLibrary.Networking.M2Mqtt.MqttClient.MqttMsgUnsubscribedEventHandler UnSubedEventHandler;/// /// 断开连接时/// public uPLibrary.Networking.M2Mqtt.MqttClient.ConnectionClosedEventHandler ConnectionClosedEventHandler;
从功能上看,这些事件从根本上划分了不同的消息处理场景——属性设置、服务调用、普通 Topic 消息、QoS 确认、发布/订阅成功或失败、以及连接断开。每一个事件都对应一个具体的回调委托,开发者只需按需绑定即可灵活处理各类物联网场景。
使用方式
绑定事件的方法非常直观:直接赋值一个符合委托签名的方法即可。来看一个具体例子:
public static void TestEvent(object sender, MqttMsgPublishEventArgs e)
{
// 处理收到的消息
string topic = e.Topic;
string message = Encoding.ASCII.GetString(e.Message);
Console.WriteLine("- - - - - - - - - - ");
Console.WriteLine("收到Topic消息,时间: " + DateTime.Now.ToLongTimeString());
Console.WriteLine("Topic: " + topic);
Console.WriteLine("消息内容: " + message);
}
// 绑定到对应的事件
client.PubPropertyEventHandler = TestEvent;
用法就是如此简洁。绑定之后,当服务器下发属性设置时,TestEvent 方法会被自动调用,你可以在该方法中实现自己的业务逻辑。其他几个事件的绑定方式完全一致,只需更换事件名称即可。
需要特别留意的是,PubedEventHandler、SubedEventHandler、UnSubedEventHandler 这组事件较为特殊——它们只在 QoS 为 1 或 2 时才会触发。如果你的应用场景对消息确认有严格要求,请务必关注这一组回调事件。
