using System; using System.Text; using System.Threading.Tasks; using Windows.UI.Core; using Windows.UI.Xaml; using MQTTnet.Core; using MQTTnet.Core.Client; using MQTTnet.Core.Diagnostics; using MQTTnet.Core.Packets; using MQTTnet.Core.Protocol; namespace MQTTnet.TestApp.UniversalWindows { public sealed partial class MainPage { private IMqttClient _mqttClient; public MainPage() { InitializeComponent(); MqttTrace.TraceMessagePublished += OnTraceMessagePublished; } private async void OnTraceMessagePublished(object sender, MqttTraceMessagePublishedEventArgs e) { await Trace.Dispatcher.RunAsync(CoreDispatcherPriority.High, () => { var text = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}] [{e.Level}] [{e.Source}] [{e.ThreadId}] [{e.Message}]{Environment.NewLine}"; if (e.Exception != null) { text += $"{e.Exception}{Environment.NewLine}"; } Trace.Text += text; }); } private async void Connect(object sender, RoutedEventArgs e) { var options = new MqttClientOptions { Server = Server.Text, UserName = User.Text, Password = Password.Text, ClientId = ClientId.Text, TlsOptions = { UseTls = UseTls.IsChecked == true }, ConnectionType = UseTcp.IsChecked == true ? MqttConnectionType.Tcp : MqttConnectionType.Ws }; try { if (_mqttClient != null) { await _mqttClient.DisconnectAsync(); } var factory = new MqttClientFactory(); _mqttClient = factory.CreateMqttClient(options); await _mqttClient.ConnectAsync(); } catch (Exception exception) { Trace.Text += exception + Environment.NewLine; } } private async void Publish(object sender, RoutedEventArgs e) { if (_mqttClient == null) { return; } try { var qos = MqttQualityOfServiceLevel.AtMostOnce; if (QoS1.IsChecked == true) { qos = MqttQualityOfServiceLevel.AtLeastOnce; } if (QoS2.IsChecked == true) { qos = MqttQualityOfServiceLevel.ExactlyOnce; } var payload = new byte[0]; if (Text.IsChecked == true) { payload = Encoding.UTF8.GetBytes(Payload.Text); } if (Base64.IsChecked == true) { payload = Convert.FromBase64String(Payload.Text); } var message = new MqttApplicationMessage( Topic.Text, payload, qos, Retain.IsChecked == true); await _mqttClient.PublishAsync(message); } catch (Exception exception) { Trace.Text += exception + Environment.NewLine; } } private async void Disconnect(object sender, RoutedEventArgs e) { try { await _mqttClient.DisconnectAsync(); } catch (Exception exception) { Trace.Text += exception + Environment.NewLine; } } private void Clear(object sender, RoutedEventArgs e) { Trace.Text = string.Empty; } private async void Subscribe(object sender, RoutedEventArgs e) { if (_mqttClient == null) { return; } try { var qos = MqttQualityOfServiceLevel.AtMostOnce; if (SubscribeQoS1.IsChecked == true) { qos = MqttQualityOfServiceLevel.AtLeastOnce; } if (SubscribeQoS2.IsChecked == true) { qos = MqttQualityOfServiceLevel.ExactlyOnce; } await _mqttClient.SubscribeAsync(new TopicFilter(SubscribeTopic.Text, qos)); } catch (Exception exception) { Trace.Text += exception + Environment.NewLine; } } private async void Unsubscribe(object sender, RoutedEventArgs e) { if (_mqttClient == null) { return; } try { await _mqttClient.UnsubscribeAsync(SubscribeTopic.Text); } catch (Exception exception) { Trace.Text += exception + Environment.NewLine; } } } }