mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-15 00:15:15 +08:00
98 lines
3.4 KiB
C#
98 lines
3.4 KiB
C#
using System;
|
|
using System.Threading.Tasks;
|
|
using System.IO;
|
|
using Newtonsoft.Json;
|
|
using System.Collections.Generic;
|
|
using MQTTnet.Client.Options;
|
|
using MQTTnet.Client.Receiving;
|
|
using MQTTnet.Extensions.ManagedClient;
|
|
using MQTTnet.Protocol;
|
|
|
|
namespace MQTTnet.TestApp.NetCore
|
|
{
|
|
public static class ManagedClientTest
|
|
{
|
|
public static async Task RunAsync()
|
|
{
|
|
var ms = new ClientRetainedMessageHandler();
|
|
|
|
var options = new ManagedMqttClientOptions
|
|
{
|
|
ClientOptions = new MqttClientOptions
|
|
{
|
|
ClientId = "MQTTnetManagedClientTest",
|
|
Credentials = new RandomPassword(),
|
|
ChannelOptions = new MqttClientTcpOptions
|
|
{
|
|
Server = "broker.hivemq.com"
|
|
}
|
|
},
|
|
|
|
AutoReconnectDelay = TimeSpan.FromSeconds(1),
|
|
Storage = ms
|
|
};
|
|
|
|
try
|
|
{
|
|
var managedClient = new MqttFactory().CreateManagedMqttClient();
|
|
managedClient.ApplicationMessageReceivedHandler = new MqttApplicationMessageReceivedHandlerDelegate(e =>
|
|
{
|
|
Console.WriteLine(">> RECEIVED: " + e.ApplicationMessage.Topic);
|
|
});
|
|
|
|
await managedClient.PublishAsync(builder => builder.WithTopic("Step").WithPayload("1"));
|
|
await managedClient.PublishAsync(builder => builder.WithTopic("Step").WithPayload("2").WithAtLeastOnceQoS());
|
|
|
|
await managedClient.StartAsync(options);
|
|
|
|
await managedClient.SubscribeAsync(new TopicFilter { Topic = "xyz", QualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce });
|
|
await managedClient.SubscribeAsync(new TopicFilter { Topic = "abc", QualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce });
|
|
|
|
await managedClient.PublishAsync(builder => builder.WithTopic("Step").WithPayload("3"));
|
|
|
|
Console.WriteLine("Managed client started.");
|
|
Console.ReadLine();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.WriteLine(e);
|
|
}
|
|
}
|
|
|
|
|
|
public class RandomPassword : IMqttClientCredentials
|
|
{
|
|
public string Password => Guid.NewGuid().ToString();
|
|
|
|
public string Username => "the_static_user";
|
|
}
|
|
|
|
public class ClientRetainedMessageHandler : IManagedMqttClientStorage
|
|
{
|
|
private const string Filename = @"RetainedMessages.json";
|
|
|
|
public Task SaveQueuedMessagesAsync(IList<ManagedMqttApplicationMessage> messages)
|
|
{
|
|
File.WriteAllText(Filename, JsonConvert.SerializeObject(messages));
|
|
return Task.FromResult(0);
|
|
}
|
|
|
|
public Task<IList<ManagedMqttApplicationMessage>> LoadQueuedMessagesAsync()
|
|
{
|
|
IList<ManagedMqttApplicationMessage> retainedMessages;
|
|
if (File.Exists(Filename))
|
|
{
|
|
var json = File.ReadAllText(Filename);
|
|
retainedMessages = JsonConvert.DeserializeObject<List<ManagedMqttApplicationMessage>>(json);
|
|
}
|
|
else
|
|
{
|
|
retainedMessages = new List<ManagedMqttApplicationMessage>();
|
|
}
|
|
|
|
return Task.FromResult(retainedMessages);
|
|
}
|
|
}
|
|
}
|
|
}
|