-
-
Save cwschroeder/7b5117dca561c01def041e7d4c6d2771 to your computer and use it in GitHub Desktop.
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; | |
}); | |
} | |
} | |
} |
Haven't got it displaying anything yet, but at least I have no errors with yours, which is a massive step up from most of the other code I have spent hours on time trying to get to work. Many thanks for sharing.
Got it working :D
Issue was in the renaming of private void btnSubscribe_Click(object sender, RoutedEventArgs e) to private void BtnSubscribe_Click(object sender, RoutedEventArgs e) had to capitalize the B to make VS happy with the naming convention, but that broke the Button event. Had to recreate new buttons and it works fine.
Thanks for the example!
Hi,
I have created my free trial login on azure and I want to use my own Broker address instead of test.mosquitto.org. can you please help me to set up my new broker. I am new on azure.
i have created a windows application with same piece of code getting error while connecting the client.
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 37.187.106.16:1883
Any idea what to do ?
Hello, I got an error for this line:
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;
"name dispatcher does not exist", what to do?
@BeginnerRaffe: Are you using WPF or Winforms? Is you are using winforms, you can replace
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;
with:
txtReceived.Invoke((MethodInvoker)(() => txtReceived.Text = ReceivedMessage));
Hii, My error is Severity Code Description Project File Line Suppression State
Error CS0246 "The type or namespace name 'uPLibrary' could not be found" (are you missing a using directive or an assembly reference?) First C:\Users\Home\source\repos\First\First\MainWindow.xaml.cs 18 Active
I am using 2019 version, Can you plss say the solution for this??
Hi Christian, i need uPLibrary same as a dll. can i use it that way
Hi,
I am using M2qtt service and client for my window application. due to some reason my client is getting disconnected from the service. but in server side,the service is running correctly. If I restart my client application, it is again started working correctly. Is there any way in which I can trace the reason of disconnecting my client from service? How how to fire the disconnect event if my client is getting disconnect from service?
Thanks, Ashok
using System;
using System.Text;
// including the M2Mqtt Library
using uPLibrary.Networking.M2Mqtt;
using uPLibrary.Networking.M2Mqtt.Messages;
namespace IOTWEBSITE
{
public partial class Default : System.Web.UI.Page
{
delegate void SetTextCallback(string text);
MqttClient client;
string clientId;
protected void Page_Load(object sender, EventArgs e)
{
client = new MqttClient("broker.hivemq.com");
client.MqttMsgPublishReceived += client_MqttMsgPublishReceived;
clientId = Guid.NewGuid().ToString();
client.Connect(clientId);
}
void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
{
string ReceivedMessage = Encoding.UTF8.GetString(e.Message);
//TextBox2.Text = ReceivedMessage;
SetText(ReceivedMessage);
}
protected void Button1_Click(object sender, EventArgs e)
{
string Topic = "testtopic/tanny";
client.Publish(Topic, Encoding.UTF8.GetBytes(TextBox1.Text), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, true);
}
protected void Button2_Click(object sender, EventArgs e)
{
string Topic = "testtopic/tanny";
client.Subscribe(new string[] { Topic }, new byte[] { 0 });
SetText("");
}
private void SetText(string text)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text }); /// Invoke Error Occured (How to Remove)
TextBox3.Text = text;
}
}
}
same thing windows application working fine
but when use web application then invoke error occured
(message send on hive mqtt broker but did not receive any message )
last 3 days finding solution
please help ................
Ye my bad. Read that shortly after too. Although all the examples I saw started with the root "/"... Quiet the reason why i deleted that comment as it was unnecessary and wrong at that point. Sorry
hi I got error at txtTopicSubscribe.Text and other .Text like txtReceived, txtPublish and others. It says the name does not exist. Did I miss any using library? I only install m2mqtt Nuget package.
i tried this https://gist.github.com/cwschroeder/7b5117dca561c01def041e7d4c6d2771#gistcomment-2790033 but still same error.
hi I got error at txtTopicSubscribe.Text and other .Text like txtReceived, txtPublish and others. It says the name does not exist. Did I miss any using library? I only install m2mqtt Nuget package.
i tried this https://gist.github.com/cwschroeder/7b5117dca561c01def041e7d4c6d2771#gistcomment-2790033 but still same error.
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
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
Hi cwschroeder , i would like to ask if it possible that your code be able to convert to web application for visual studio?