本仓库基于 MqttDotNet。更多相关信息,请参考:
http://github.com/stevenlovegrove/MqttDotNet
http://www.doc.ic.ac.uk/~sl203/
提示 .net sdk 默认会把连接信息存在 Mqtt.dll.config 里面,在连接的时候优先读取缓存的信息,避免每次初始化的重新申请以加快速度。在打包之前,请先移除该文件内的登陆信息,这些登陆信息包括:username
、password
和client_id
,均以 K-V 形式存在,sdk 没有找到这些消息的话就会重新去申请登陆信息。
.NET Framework 2.0
- 用 Visual Studio 2013 打开 MqttDotNet.sln 工程文件。
- 编译 MqttLib 库
- 编译 Sample 工程,进行测试
Sample.exe YourYunbaAppkey
清除可执行路径下的 *.config 文件。
用你的 Appkey 创建一个客户端实例。
yunbaAppkey
是用户 在云巴 Portal 创建新应用 后获取到的一串字符。
IMqtt client = MqttClientFactory.CreateClientWithAppkey("YourYunbaAppkey");
初始化客户端。
client.Start();
订阅一个 频道。
topic
是待订阅的频道的名称。只支持英文数字下划线,长度不超过 50 个字符。qos
是 QoS 等级,此处的 QoS 暂未实现,请填 QoS.AtLeastOnce。
client.Subscribe("topic_name", QoS.AtLeastOnce);
取消对某一个或多个 频道 的订阅。取消订阅后,不会再收到来自该频道的消息。
topics
是待取消的频道数组。
string[] topics = {"topic_name"};
client.Unsubscribe(topics);
向某频道发布一条消息,并指定 QoS 等级。
topic
是目标频道。只支持英文数字下划线,长度不超过 50 个字符。payload
是待发布的消息内容。qos
是 QoS 等级。retained
暂未实现,请填 false。
client.Publish("topic_name", "message_content", QoS.AtLeastOnce, false);
为客户端设置一个 别名。
alias
是客户端的 别名。只支持英文数字下划线,长度不超过 50 个字符。
client.SetAlias("myname");
获取客户端的 别名。
cb
是收到回应时调用的回调函数。
client.GetAlias(delegate(object sender, ExtendedAckArrivedArgs e)
{
Console.WriteLine("Alias: " + e.Payload);
});
向某个客户端 别名 发消息。
client.PublishToAlias("myname", "message_content", QoS.AtLeastOnce, false);
获取客户端订阅的 频道 列表。
cb
是收到回应时调用的回调函数。
client.GetTopicList(delegate(object sender, ExtendedAckArrivedArgs e)
{
Console.WriteLine("Topics: " + e.Payload);
});
获取客户端订阅的 频道 列表。
alias
是客户端的 别名。只支持英文数字下划线,长度不超过 50 个字符。cb
是收到回应时调用的回调函数。
client.GetTopicList("peer_name", delegate(object sender, ExtendedAckArrivedArgs e)
{
Console.WriteLine("Topics: " + e.Payload);
});
topic
是目标频道。只支持英文数字下划线,长度不超过 50 个字符。cb
是收到回应时调用的回调函数。
client.GetAliasList("topic_name", delegate(object sender, ExtendedAckArrivedArgs e)
{
Console.WriteLine("AliasList: " + e.Payload);
});
获取某个客户端的在线状态。
alias
是客户端的 别名。只支持英文数字下划线,长度不超过 50 个字符。cb
是收到回应时调用的回调函数。
client.GetState("peer_name", delegate(object sender, ExtendedAckArrivedArgs e)
{
Console.WriteLine("State: " + e.Payload);
});
Publish2
是 publish
的升级版本,可带更多参数。
topic
是目标频道。只支持英文数字下划线,长度不超过 50 个字符。payload
是待发布的消息内容。qos
是 QoS 等级。ttl
是消息在服务器上存储的时间,单位是秒(例如,“3600”代表1小时),默认值为 5 天,最大不超过 15 天。apn_json
是 APN 选项。
JObject apn_json = new JObject();
JObject aps = new JObject();
aps.Add("sound", "bingbong.aiff");
aps.Add("badge", 9);
aps.Add("alert", "msg from .net");
apn_json.Add("aps", aps);
client.Publish2("topic_name", "message_content", QoS.AtLeastOnce, 30, JsonConvert.SerializeObject(apn_json));
向某个 别名 发布消息,可带有部分选项。
alias
是客户端的 别名。只支持英文数字下划线,长度不超过 50 个字符。payload
是待发布的消息内容。qos
是 QoS 等级。ttl
是消息在服务器上存储的时间,单位是秒(例如,“3600”代表1小时),默认值为 5 天,最大不超过 15 天。apn_json
是 APN 选项。
client.Publish2Alias("peer_name", "message_content", QoS.AtLeastOnce, 0, "");
连接成功建立。
client.Connected += new ConnectionDelegate(client_Connected);
void client_Connected(object sender, EventArgs e)
{
Console.WriteLine("Client connected\n");
}
连接断开。
client.ConnectionLost += new ConnectionDelegate(client_ConnectionLost);
void client_ConnectionLost(object sender, EventArgs e)
{
Console.WriteLine("Client connection lost\n");
}
收到消息。
client.PublishArrived += new PublishArrivedDelegate(client_PublishArrived);
bool client_PublishArrived(object sender, PublishArrivedArgs e)
{
Console.WriteLine("Receive Message");
Console.WriteLine("Topic: " + e.Topic);
Console.WriteLine("Payload: " + e.Payload);
return true;
}
声明:对于自行修改 sdk 而导致的问题,云巴恕不提供技术支持。如果对于 sdk 有个性化需求,可以联系商务定制开发:xieting@yunba.io