Last active
May 27, 2024 15:58
-
-
Save cwschroeder/7b5117dca561c01def041e7d4c6d2771 to your computer and use it in GitHub Desktop.
Example of a C# MQTT client
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Text; | |
using System.Threading.Tasks; | |
using System.Windows; | |
using System.Windows.Controls; | |
using System.Windows.Data; | |
using System.Windows.Documents; | |
using System.Windows.Input; | |
using System.Windows.Media; | |
using System.Windows.Media.Imaging; | |
using System.Windows.Navigation; | |
using System.Windows.Shapes; | |
// including the M2Mqtt Library | |
using uPLibrary.Networking.M2Mqtt; | |
using uPLibrary.Networking.M2Mqtt.Messages; | |
namespace WpfApplication1 | |
{ | |
/// <summary> | |
/// Interaction logic for MainWindow.xaml | |
/// </summary> | |
public partial class MainWindow : Window | |
{ | |
MqttClient client; | |
string clientId; | |
// this code runs when the main window opens (start of the app) | |
public MainWindow() | |
{ | |
InitializeComponent(); | |
string BrokerAddress = "test.mosquitto.org"; | |
client = new MqttClient(BrokerAddress); | |
// register a callback-function (we have to implement, see below) which is called by the library when a message was received | |
client.MqttMsgPublishReceived += client_MqttMsgPublishReceived; | |
// use a unique id as client id, each time we start the application | |
clientId = Guid.NewGuid().ToString(); | |
client.Connect(clientId); | |
} | |
// this code runs when the main window closes (end of the app) | |
protected override void OnClosed(EventArgs e) | |
{ | |
client.Disconnect(); | |
base.OnClosed(e); | |
App.Current.Shutdown(); | |
} | |
// this code runs when the button "Subscribe" is clicked | |
private void btnSubscribe_Click(object sender, RoutedEventArgs e) | |
{ | |
if (txtTopicSubscribe.Text != "") | |
{ | |
// whole topic | |
string Topic = "/ElektorMyJourneyIoT/" + txtTopicSubscribe.Text + "/test"; | |
// subscribe to the topic with QoS 2 | |
client.Subscribe(new string[] { Topic }, new byte[] { 2 }); // we need arrays as parameters because we can subscribe to different topics with one call | |
txtReceived.Text = ""; | |
} | |
else | |
{ | |
System.Windows.MessageBox.Show("You have to enter a topic to subscribe!"); | |
} | |
} | |
// this code runs when the button "Publish" is clicked | |
private void btnPublish_Click(object sender, RoutedEventArgs e) | |
{ | |
if (txtTopicPublish.Text != "") | |
{ | |
// whole topic | |
string Topic = "/ElektorMyJourneyIoT/" + txtTopicPublish.Text + "/test"; | |
// publish a message with QoS 2 | |
client.Publish(Topic, Encoding.UTF8.GetBytes(txtPublish.Text), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, true); | |
} | |
else | |
{ | |
System.Windows.MessageBox.Show("You have to enter a topic to publish!"); | |
} | |
} | |
// this code runs when a message was received | |
void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e) | |
{ | |
string ReceivedMessage = Encoding.UTF8.GetString(e.Message); | |
Dispatcher.Invoke(delegate { // we need this construction because the receiving code in the library and the UI with textbox run on different threads | |
txtReceived.Text = ReceivedMessage; | |
}); | |
} | |
} | |
} |
protected override void OnClosed(EventArgs e)
{
client.Disconnect();
base.OnClosed(e);
App.Current.Shutdown();
}
In the above code App does not exist how to solve it please tell me.
protected override void OnClosed(EventArgs e)
{
client.Disconnect();base.OnClosed(e); App.Current.Shutdown(); }
In the above code App does not exist how to solve it please tell me.
I think if you dont use any app in your program you can just exclude the code
if my broker return object ? how to handle this in the callback event ?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
in reply to this, i learned that those supposed .Text is where textbox should be linked. Sorry I'm a self-learnt newbie, just thought it would be useful to share here too