MQttConnection
Connector.cs
Go to the documentation of this file.
1 using MQTTnet;
2 using MQTTnet.Client;
3 using MQTTnet.Client.Options;
4 using MQTTnet.Client.Disconnecting;
5 using MQTTnet.Client.Connecting;
6 
7 using System.Text;
8 
9 namespace MQttConnection
10 {
14  public class Connector
15  {
16  private string _host;
17  private int _port;
18  private bool _tls = true;
19  private string? _username;
20  private string? _password;
21  private string _payload;
22  private string _topic;
23  private string _clientid = "Client";
25  public delegate void MessageHandler(Connector c, Message e);
26  public static IMqttClient client = new MqttFactory().CreateMqttClient();
27 
28  public string Host { get { return _host; } set { _host = value; } }
29  public int Port { get { return _port; } set { _port = value; } }
30  public string Payload { get { return _payload; } set { _payload = value; } }
31  public bool Tls { get { return _tls; } set { _tls = value; } }
32  public string topic { get { return _topic; } set { _topic = value; } }
33  public string clientid { get { return _clientid; } set { _clientid = value; } }
34 
35 
36  private static MqttClientOptionsBuilder mqttClientOptionsBuilder = new MqttClientOptionsBuilder();
37 
41  public Connector()
42  {
43  _host = "localhost";
44  _port = 1883;
45  _payload = "";
46  }
47 
53  public Connector(string host, int port)
54  {
55  _host = host;
56  _port = port;
57  _payload = "";
58  }
59 
67  public Connector(string host, int port, string username, string password)
68  {
69  _host = host;
70  _port = port;
71  _username = username;
72  _password = password;
73  _payload = "";
74  }
75 
80  public async Task Initialize()
81  {
82  try
83  {
84  client.UseApplicationMessageReceivedHandler(MessageRecieved);
85  client.UseConnectedHandler(ConnectionHandler);
86  client.UseDisconnectedHandler(DisconnectHandler);
87 
88  var options = BuildClientOptions();
89  await client.ConnectAsync(options, CancellationToken.None);
90  }
91  catch (Exception ex)
92  {
93  Console.WriteLine(ex.Message);
94  }
95 
96  }
97 
102  public async Task<bool> CloseConnection()
103  {
104  await client.DisconnectAsync();
105  return true;
106  }
107 
112  public async void UnsubscribeTopic(string topic)
113  {
114  await client.UnsubscribeAsync(topic);
115 
116  }
117 
122  public async void SubscribeTopic(string topic)
123  {
124  await client.SubscribeAsync(topic);
125  }
126 
135  public async Task PublishAsync(string topic, string payload, bool retainFlag = true, int qos = 1) =>
136  await client.PublishAsync(new MqttApplicationMessageBuilder()
137  .WithTopic(topic)
138  .WithPayload(payload)
139  .WithQualityOfServiceLevel((MQTTnet.Protocol.MqttQualityOfServiceLevel)qos)
140  .WithRetainFlag(retainFlag)
141  .Build());
142 
147  private void ConnectionHandler(MqttClientConnectedEventArgs e)
148  {
149 
150  Message message = new ();
151  message.EventMessage = e.ConnectResult.ResultCode.ToString();
152  messagehandler(this, message);
153 
154  }
155 
160  private void DisconnectHandler(MqttClientDisconnectedEventArgs e)
161  {
162  Message message = new ();
163  message.EventMessage = e.Exception.Message;
164  messagehandler(this, message);
165  }
166 
171  private void MessageRecieved(MqttApplicationMessageReceivedEventArgs mq_message)
172  {
173  Payload = Encoding.UTF8.GetString(mq_message.ApplicationMessage.Payload);
174 
175  Message message = new ();
176  message.EventMessage = Payload;
177  messagehandler(this, message);
178  }
179 
185  private IMqttClientOptions BuildClientOptions()
186  {
187  if (_host == null || _port == 0)
188  {
189  throw new ArgumentException("No Host or Port");
190  }
191  mqttClientOptionsBuilder.WithClientId(_clientid);
192  mqttClientOptionsBuilder.WithTcpServer(_host, _port);
193  mqttClientOptionsBuilder.WithCleanSession();
194  if (_username != null && _password != null)
195  {
196  mqttClientOptionsBuilder.WithCredentials(_username, _password);
197  }
198  if (_tls)
199  {
200  mqttClientOptionsBuilder.WithTls();
201  }
202 
203  var options = mqttClientOptionsBuilder.Build();
204  return options;
205  }
206 
207  }
208 }
MessageHandler messagehandler
Definition: Connector.cs:24
Connector()
default constructor
Definition: Connector.cs:41
static IMqttClient client
Definition: Connector.cs:26
async void UnsubscribeTopic(string topic)
Unsubscribe Mqtt Topic
Definition: Connector.cs:112
async Task Initialize()
Start Mqtt connection
Definition: Connector.cs:80
IMqttClientOptions BuildClientOptions()
Option Builder
Definition: Connector.cs:185
Connector(string host, int port)
constructor with parameters
Definition: Connector.cs:53
Connector(string host, int port, string username, string password)
constructor with parameters
Definition: Connector.cs:67
void MessageRecieved(MqttApplicationMessageReceivedEventArgs mq_message)
Message Handler
Definition: Connector.cs:171
async void SubscribeTopic(string topic)
Subscribe Mqtt Topic
Definition: Connector.cs:122
async Task PublishAsync(string topic, string payload, bool retainFlag=true, int qos=1)
Publish asynchronusly
CLass Connector to connect MQTT Server
Definition: Connector.cs:14
delegate void MessageHandler(Connector c, Message e)
void DisconnectHandler(MqttClientDisconnectedEventArgs e)
Handler for disconnection
Definition: Connector.cs:160
async Task< bool > CloseConnection()
Close Mqtt connection
Definition: Connector.cs:102
static MqttClientOptionsBuilder mqttClientOptionsBuilder
Definition: Connector.cs:36
void ConnectionHandler(MqttClientConnectedEventArgs e)
Handler for connection
Definition: Connector.cs:147