using System.Security.Authentication;
using System.Threading.Tasks;
using DeviceEmulator.Configuration;
using DeviceEmulator.Messages;
using DeviceEmulator.Mqtt;
using MQTTnet.Client.Options;
using MQTTnet.Diagnostics;
static void Main(string[] args)
RegisterAndConnectDeviceAsync()
private static async Task RegisterAndConnectDeviceAsync()
var mqttClient = new MqttFactory()
var mqttClientApplicationMessageReceivedHandler = new ApplicationMessageReceiver(
Console.WriteLine($"New message received. Topic - {t}; Message - {p}. ");
if (t.Contains("config"))
var response = JsonConvert.DeserializeObject<ConfigMessage>(p);
if (response.Status == 0)
Console.WriteLine("Received config.");
Console.WriteLine($"Ups , can't connect to Azure IoT hub is failed because of {exp}");
Console.WriteLine($"Ups, something went wrong. Error occurs with code {response.Status}");
mqttClient.ApplicationMessageReceivedHandler = mqttClientApplicationMessageReceivedHandler;
mqttClient.UseConnectedHandler(e => Console.WriteLine($"Connected with a reason - {e.AuthenticateResult.ResultCode}"));
mqttClient.UseDisconnectedHandler(e => Console.WriteLine("Disconnected"));
var settings = ConfigurationSettingsFactory.Create();
var options = MqttClientOptionsFactory.Create(settings);
await mqttClient.ConnectAsync(options, new CancellationToken());
await mqttClient.CustomSubscribeAsync($"provision/{settings.ProvisioningServer.UserName}/{settings.DeviceId}/v1/config");
await mqttClient.CustomSubscribeAsync($"provision/{settings.ProvisioningServer.UserName}/{settings.DeviceId}/v1/pem/*");
await mqttClient.CustomPublishAsync($"provision/{settings.ProvisioningServer.UserName}/{settings.DeviceId}/v1/init", "Hello");
Console.WriteLine("Press any key to exit");