using PMqttClient; namespace MqttMultiTopicClientApp { internal class Program { private static string SERVER_IP = "localhost"; private static readonly int PORT = 1883; private static MqttMultiTopicClient _mqttClient; static async Task Main(string[] args) { _mqttClient = new MqttMultiTopicClient(); _mqttClient.LogHandler += MqttClient_LogHandler; _mqttClient.MessageHandler += MqttClient_MessageHandler; await _mqttClient.AddTopicAsync("home/livingroom/temperature", MqttQoSLevel.AtLeastOnce); await Task.Delay(1000); await _mqttClient.ConnectAsync(SERVER_IP, PORT, $"cid_{Random.Shared.Next(1, 1000)}"); await _mqttClient.AddTopicAsync("home/bedroom/humidity", MqttQoSLevel.AtMostOnce); await _mqttClient.AddTopicAsync("home/kitchen/temperature", MqttQoSLevel.AtMostOnce); while (true) { Console.WriteLine(); Console.WriteLine("----------------------"); Console.WriteLine("Add topic(1)"); Console.WriteLine("Publish message(2)"); Console.WriteLine("Else: Exit"); Console.WriteLine("----------------------"); Console.Write(">"); string command = Console.ReadLine(); await HandleCommand(command); } } private static void MqttClient_MessageHandler(object? sender, string e) { Console.WriteLine($"[Message] {e}"); } private static void MqttClient_LogHandler(object? sender, string e) { Console.WriteLine($"[Log] {e}"); } static async Task HandleCommand(string command) { if (command.Contains("1", StringComparison.InvariantCultureIgnoreCase)) { Console.WriteLine("Topic?"); Console.Write(">"); string topic = Console.ReadLine(); Console.WriteLine("QoS(0-2)"); Console.Write(">"); string qos = Console.ReadLine(); int.TryParse(qos, out int convertedQos); await _mqttClient.AddTopicAsync(topic, (MqttQoSLevel)convertedQos); } else if (command.Contains("2", StringComparison.InvariantCultureIgnoreCase)) { Console.WriteLine("Topic?"); Console.Write(">"); string topic = Console.ReadLine(); Console.WriteLine("Message?"); Console.Write(">"); string message = Console.ReadLine(); Console.WriteLine("QoS(0-2)"); Console.Write(">"); string qos = Console.ReadLine(); int.TryParse(qos, out int convertedQos); await _mqttClient.PubishAsync(topic, message, (MqttQoSLevel)convertedQos); } else { await _mqttClient.DisconnectAsync(); } } } }