このエントリーをはてなブックマークに追加

sangoの使い方 -- C#編

これまでppatiernoさんが開発していたMQTTライブラリm2mqttがpahoに寄贈されました。

http://www.eclipse.org/paho/clients/dotnet/

このライブラリは以下の.Netプラットフォームに対応しています。

  • .Net Framework (4.5まで)
  • .Net Compact Framework 3.5 & 3.9 (for Windows Embedded Compact 7/ 2013)
  • .Net Micro Framework 4.2 & 4.3
  • Mono (for Linux O.S.)
  • WinRT platforms (Windows 8.1 and Windows Phone 8.1)

ただし、現時点ではMQTT 3.1.1には対応していません。(sangoは3.1にも対応しています)

確認していませんが、このライブラリを使えばUnityでもMQTTが使えるかもしれませんね。

1. ライブラリのダウンロード

http://www.eclipse.org/paho/clients/dotnet/

からダウンロードできます。

ただし、 codeplexがNuGetで配布しておりますので、NuGetからダウンロードしたほうが簡単かと思います。(m2mqttで検索)

2. クライアントの実装

Connect

class MQTT
{
    private MqttClient client;

    public void Connect(string brokerHostname, int brokerPort,
    string userName, string password)
    {
        // SSL使用時はtrue、CAを指定
        client = new MqttClient(brokerHostname, brokerPort, false,
        null);
        // clientidを生成
        string clientId = Guid.NewGuid().ToString();
        client.Connect(clientId, userName, password);
    }

uPLibrary.Networking.M2Mqtt.MqttClientをnewして、Connectします。MqttClientでは、ホスト名だけを指定するなどのオーバーロードがあります。

Subscribe

// メッセージ到着時に呼び出されるメソッド
private void onReceive(object sender,
uPLibrary.Networking.M2Mqtt.Messages.MqttMsgPublishEventArgs e)
{
    Console.WriteLine(e.Topic);
    string msg = Encoding.UTF8.GetString(e.Message);
    Console.WriteLine(msg);
}

public void Subscribe(string topic){
    // callbackを登録
    client.MqttMsgPublishReceived += this.onReceive;
    client.Subscribe(new string[] { topic }, new byte[] {
    MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE });
}

client.MqttMsgPublishReceivedにメソッドを追加しておき、Subscribeします。

Publish

public void Publish(string topic, string msg)
{
    client.Publish(
        topic, Encoding.UTF8.GetBytes(msg),
        MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE, false); // retainが
        false
}

Publishをするだけです。