Skip to content

yunba/yunba-csharp-sdk

Repository files navigation

yunba-csharp-sdk

本仓库基于 MqttDotNet。更多相关信息,请参考:

http://github.com/stevenlovegrove/MqttDotNet

http://www.doc.ic.ac.uk/~sl203/

提示 .net sdk 默认会把连接信息存在 Mqtt.dll.config 里面,在连接的时候优先读取缓存的信息,避免每次初始化的重新申请以加快速度。在打包之前,请先移除该文件内的登陆信息,这些登陆信息包括:usernamepasswordclient_id,均以 K-V 形式存在,sdk 没有找到这些消息的话就会重新去申请登陆信息。

依赖

.NET Framework 2.0

Newtonsoft.Json

如何编译

  1. 用 Visual Studio 2013 打开 MqttDotNet.sln 工程文件。
  2. 编译 MqttLib 库
  3. 编译 Sample 工程,进行测试

测试

Sample.exe YourYunbaAppkey

清除用户的注册信息

清除可执行路径下的 *.config 文件。

API 说明

CreateClientWithAppkey(string yunbaAppkey)

用你的 Appkey 创建一个客户端实例。

IMqtt client = MqttClientFactory.CreateClientWithAppkey("YourYunbaAppkey");

Start()

初始化客户端。

client.Start();

Subscribe(string topic, QoS qos)

订阅一个 频道

  • topic 是待订阅的频道的名称。只支持英文数字下划线,长度不超过 50 个字符。
  • qosQoS 等级,此处的 QoS 暂未实现,请填 QoS.AtLeastOnce。
client.Subscribe("topic_name", QoS.AtLeastOnce);

Unsubscribe(string[] topics)

取消对某一个或多个 频道 的订阅。取消订阅后,不会再收到来自该频道的消息。

  • topics 是待取消的频道数组。
string[] topics = {"topic_name"};
client.Unsubscribe(topics);

Publish(string topic, MqttPayload payload, QoS qos, bool retained)

向某频道发布一条消息,并指定 QoS 等级。

  • topic 是目标频道。只支持英文数字下划线,长度不超过 50 个字符。
  • payload 是待发布的消息内容。
  • qosQoS 等级。
  • retained 暂未实现,请填 false。
client.Publish("topic_name", "message_content", QoS.AtLeastOnce, false);

SetAlias(string alias)

为客户端设置一个 别名

  • alias 是客户端的 别名。只支持英文数字下划线,长度不超过 50 个字符。
client.SetAlias("myname");

GetAlias(ExtendedAckArrivedDelegate cb)

获取客户端的 别名

  • cb 是收到回应时调用的回调函数。
client.GetAlias(delegate(object sender, ExtendedAckArrivedArgs e)
{
	Console.WriteLine("Alias: " + e.Payload);
});

PublishToAlias(string alias, MqttPayload payload, QoS qos, bool retained)

向某个客户端 别名 发消息。

  • alias 是客户端的 别名。只支持英文数字下划线,长度不超过 50 个字符。
  • payload 是待发送的消息内容。
  • qosQoS 等级。
  • retained 暂未实现,请填 false。
client.PublishToAlias("myname", "message_content", QoS.AtLeastOnce, false);

GetTopicList(ExtendedAckArrivedDelegate cb)

获取客户端订阅的 频道 列表。

  • cb 是收到回应时调用的回调函数。
client.GetTopicList(delegate(object sender, ExtendedAckArrivedArgs e)
{
	Console.WriteLine("Topics: " + e.Payload);
});

GetTopicList(string alias, ExtendedAckArrivedDelegate cb)

获取客户端订阅的 频道 列表。

  • alias 是客户端的 别名。只支持英文数字下划线,长度不超过 50 个字符。
  • cb 是收到回应时调用的回调函数。
client.GetTopicList("peer_name", delegate(object sender, ExtendedAckArrivedArgs e)
{
	Console.WriteLine("Topics: " + e.Payload);
});

GetAliasList(string topic, ExtendedAckArrivedDelegate cb)

获取某 频道 的所有订阅者的 别名

  • topic 是目标频道。只支持英文数字下划线,长度不超过 50 个字符。
  • cb 是收到回应时调用的回调函数。
client.GetAliasList("topic_name", delegate(object sender, ExtendedAckArrivedArgs e)
{
	Console.WriteLine("AliasList: " + e.Payload);
});

GetState(string alias, ExtendedAckArrivedDelegate cb)

获取某个客户端的在线状态。

  • alias 是客户端的 别名。只支持英文数字下划线,长度不超过 50 个字符。
  • cb 是收到回应时调用的回调函数。
client.GetState("peer_name", delegate(object sender, ExtendedAckArrivedArgs e)
{
	Console.WriteLine("State: " + e.Payload);
});

Publish2(string topic, MqttPayload payload, QoS qos, int ttl, string apn_json)

Publish2publish 的升级版本,可带更多参数。

  • topic 是目标频道。只支持英文数字下划线,长度不超过 50 个字符。
  • payload 是待发布的消息内容。
  • qosQoS 等级。
  • 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));

Publish2Alias(string alias, MqttPayload payload, QoS qos, int ttl, string apn_json)

向某个 别名 发布消息,可带有部分选项。

  • alias 是客户端的 别名。只支持英文数字下划线,长度不超过 50 个字符。
  • payload 是待发布的消息内容。
  • qosQoS 等级。
  • ttl 是消息在服务器上存储的时间,单位是秒(例如,“3600”代表1小时),默认值为 5 天,最大不超过 15 天。
  • apn_json 是 APN 选项。
client.Publish2Alias("peer_name", "message_content", QoS.AtLeastOnce, 0, "");

事件

Connected

连接成功建立。

client.Connected += new ConnectionDelegate(client_Connected);

void client_Connected(object sender, EventArgs e)
{
	Console.WriteLine("Client connected\n");
}

ConnectionLost

连接断开。

client.ConnectionLost += new ConnectionDelegate(client_ConnectionLost);

void client_ConnectionLost(object sender, EventArgs e)
{
	Console.WriteLine("Client connection lost\n");
}

PublishArrived

收到消息。

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