You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
4.9 KiB
131 lines
4.9 KiB
using System;
|
|
using System.Net;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Media;
|
|
using RobotClientWpf.Utilities;
|
|
using RobotLib;
|
|
|
|
namespace RobotClientWpf
|
|
{
|
|
/// <summary>
|
|
/// Interaction logic for MainWindow.xaml
|
|
/// </summary>
|
|
public partial class MainWindow : Window
|
|
{
|
|
private ChallengeFactory challenge;
|
|
private bool manualDisconnect;
|
|
|
|
public MainWindow()
|
|
{
|
|
InitializeComponent();
|
|
this.challenge = new ChallengeFactory();
|
|
this.challenge.PublisherSubscriber.ConnectionStateChanged += PublisherSubscriber_ConnectionStateChanged;
|
|
}
|
|
|
|
private void PublisherSubscriber_ConnectionStateChanged(object? sender, bool e)
|
|
{
|
|
if(e == false)
|
|
{
|
|
if (manualDisconnect == true) manualDisconnect = false; return;
|
|
this.DisplayBottomMessage(MessageSeverity.Error, "Connection to MQTT broker lost.");
|
|
this.SetIpFieldsState(true, true, "Connect");
|
|
}
|
|
}
|
|
|
|
private void BatteryChanged(object? sender, BatteryEventArgs e)
|
|
{
|
|
if (!Dispatcher.CheckAccess())
|
|
{
|
|
EventHandler<BatteryEventArgs> eventDelegate = BatteryChanged;
|
|
Dispatcher.Invoke(eventDelegate, sender, e);
|
|
}
|
|
else
|
|
{
|
|
//labelBattery.Content = $"Battery: {e.Voltage} V";
|
|
}
|
|
}
|
|
|
|
private void buttonBuzz_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
//Robot.Instance.Buzzer.Beep(300, 500);
|
|
}
|
|
|
|
private void btnConnectDisconnect_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
Task.Run(delegate ()
|
|
{
|
|
this.ClearBottomMessage();
|
|
if (this.challenge.PublisherSubscriber.IsConnected) // is connected => disconnect
|
|
{
|
|
manualDisconnect = true; // prevent wrong message
|
|
this.challenge.PublisherSubscriber.Disconnect();
|
|
this.DisplayBottomMessage(MessageSeverity.Success, "Disconnected from MQTT broker.");
|
|
this.SetIpFieldsState(true, true, "Connect");
|
|
}
|
|
else // is not yet connected => connect
|
|
{
|
|
this.SetIpFieldsState(false, false, "Connecting...");
|
|
string ipAddress = UIAccessHelpers.GetTextboxText(tbIp);
|
|
if (IPAddress.TryParse(ipAddress, out _))
|
|
{
|
|
var connectionSuccess = this.challenge.PublisherSubscriber.Connect(ipAddress);
|
|
if (connectionSuccess)
|
|
{
|
|
this.DisplayBottomMessage(MessageSeverity.Success, "Successfully connected to MQTT broker.");
|
|
this.SetIpFieldsState(false, true, "Disconnect");
|
|
}
|
|
else
|
|
{
|
|
this.DisplayBottomMessage(MessageSeverity.Error, $"Failed to connect to MQTT broker on address {ipAddress}.");
|
|
this.SetIpFieldsState(true, true, "Connect");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.DisplayBottomMessage(MessageSeverity.Error, $"Unable to parse MQTT Broker IP address {ipAddress}.");
|
|
this.SetIpFieldsState(true, true, "Connect");
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
private void SetIpFieldsState(bool ipTextbox, bool connectDisconnectButton, string buttonText)
|
|
{
|
|
UIAccessHelpers.SetButtonState(btnConnectDisconnect, connectDisconnectButton);
|
|
UIAccessHelpers.SetTextboxState(tbIp, ipTextbox);
|
|
UIAccessHelpers.SetButtonContent(btnConnectDisconnect, buttonText);
|
|
}
|
|
|
|
public void DisplayBottomMessage(MessageSeverity severity, string message)
|
|
{
|
|
Brush col;
|
|
switch (severity)
|
|
{
|
|
case MessageSeverity.Success:
|
|
col = Brushes.Green;
|
|
break;
|
|
case MessageSeverity.Warning:
|
|
col = Brushes.Orange;
|
|
break;
|
|
case MessageSeverity.Error:
|
|
col = Brushes.Red;
|
|
break;
|
|
case MessageSeverity.Information:
|
|
col = Brushes.Blue;
|
|
break;
|
|
case MessageSeverity.Unknown:
|
|
default:
|
|
col = Brushes.DarkGray;
|
|
break;
|
|
}
|
|
|
|
UIAccessHelpers.SetTextblockTextAndForegroundColor(tbBottomMessage, message, col);
|
|
}
|
|
|
|
private void ClearBottomMessage()
|
|
{
|
|
this.DisplayBottomMessage(MessageSeverity.Information, "");
|
|
}
|
|
}
|
|
}
|
|
|