Files
MQTTnet/Tests/MQTTnet.TestApp.NetCore/ManagedClientTest.cs
T
Christian 6bad9f183c Merge branch 'master' of https://github.com/chkr1011/MQTTnet into feature/Reason_Code_In_Subscription_Interceptor
# Conflicts:
#	Build/MQTTnet.nuspec
#	Source/MQTTnet/Server/Internal/MqttClientSessionsManager.cs
2021-10-29 21:58:57 +02:00

100 lines
3.5 KiB
C#

using System;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft.Json;
using System.Collections.Generic;
using MQTTnet.Client;
using MQTTnet.Extensions.ManagedClient;
using MQTTnet.Implementations;
using MQTTnet.Packets;
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.ApplicationMessageReceivedAsync += e =>
{
Console.WriteLine(">> RECEIVED: " + e.ApplicationMessage.Topic);
return PlatformAbstractionLayer.CompletedTask;
};
await managedClient.StartAsync(options);
await managedClient.PublishAsync(builder => builder.WithTopic("Step").WithPayload("1"));
await managedClient.PublishAsync(builder => builder.WithTopic("Step").WithPayload("2").WithAtLeastOnceQoS());
await managedClient.SubscribeAsync(new MqttTopicFilter { Topic = "xyz", QualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce });
await managedClient.SubscribeAsync(new MqttTopicFilter { 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 byte[] Password => Guid.NewGuid().ToByteArray();
public string Username => "the_static_user";
}
public class ClientRetainedMessageHandler : IManagedMqttClientStorage
{
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);
}
}
}
}