コンテンツにスキップ

C# クライアント

準備

dotnet-sdkのインストール

brew install dotnet-sdk

プロジェクトディレクトリの作成

mkdir csharp-mqtt && cd csharp-mqtt

コンソールプロジェクトの作成

dotnet new console --framework net7.0

MQTTnetパッケージの追加

dotnet add package MQTTnet --version 4.3.3.952

接続(TLSなし)

MQTTの平文ソケットでmachbase-neoに接続します。

var mqttFactory = new MqttFactory();
var mqttClient = mqttFactory.CreateMqttClient();
var connectOptions = new MqttClientOptionsBuilder().WithTcpServer("127.0.0.1", 5653).Build();
var connAck = await mqttClient.ConnectAsync(connectOptions, CancellationToken.None);

connAck.DumpToConsole();

切断

var mqttClientDisconnectOptions = mqttFactory.CreateClientDisconnectOptionsBuilder().Build();
await mqttClient.DisconnectAsync(mqttClientDisconnectOptions, CancellationToken.None);

メッセージの発行

var msg = new MqttApplicationMessageBuilder()
.WithTopic("db/append/example")
.WithPayload(@"[
                [""temperature"",1677033057000000000,21.1],
                [""humidity"",1677033057000000000,0.53]
            ]")
.Build();

await mqttClient.PublishAsync(msg, CancellationToken.None);

ソースコード全体

using MQTTnet;
using MQTTnet.Client;
using System.Text.Json;

namespace MqttTest
{
    internal class Program
    {
        private static async Task Main()
        {
            var mqttFactory = new MqttFactory();
            var mqttClient = mqttFactory.CreateMqttClient();
            var connectOptions = new MqttClientOptionsBuilder().WithTcpServer("127.0.0.1", 5653).Build();
            var connAck = await mqttClient.ConnectAsync(connectOptions, CancellationToken.None);
            
            connAck.DumpToConsole();

            var msg = new MqttApplicationMessageBuilder()
                .WithTopic("db/append/example")
                .WithPayload(@"[
                                [""temperature"",1677033057000000000,21.1],
                                [""humidity"",1677033057000000000,0.53]
                            ]")
                .Build();

            await mqttClient.PublishAsync(msg, CancellationToken.None);

            var mqttClientDisconnectOptions = mqttFactory.CreateClientDisconnectOptionsBuilder().Build();
            await mqttClient.DisconnectAsync(mqttClientDisconnectOptions, CancellationToken.None);
        }
    }
}

internal static class ObjectExtensions
{
    public static TObject DumpToConsole<TObject>(this TObject @object)
    {
        var output = "NULL";
        if (@object != null)
        {
            output = JsonSerializer.Serialize(@object, new JsonSerializerOptions
            {
                WriteIndented = true
            });
        }
        
        Console.WriteLine($"[{@object?.GetType().Name}]:\r\n{output}");
        return @object;
    }
}
最終更新日