Skip to content
This repository was archived by the owner on Jul 10, 2024. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,14 @@
using awsiotmqttoverwebsocketswinapp.View;
using awsiotmqttoverwebsocketswinapp.Model;
using MQTTnet.Client;
using MQTTnet.Client.Connecting;
using MQTTnet.Client.Disconnecting;
using MQTTnet.Client.Options;
using MQTTnet.Client.Receiving;
using MQTTnet.Extensions.ManagedClient;
using MQTTnet.Formatter;
using MQTTnet.Protocol;
using MQTTnet.Server;
using MQTTnet;
using awsiotmqttoverwebsocketswinapp.Utils;
using System.Text;
Expand All @@ -17,7 +25,9 @@ public class AwsIotPresenter
public IMqttClient mqttClient;
private IMqttClientOptions mqttClientOptions;
private string lastSubscribedTopic;

private IManagedMqttClient managedMqttClientPublisher;
//private IManagedMqttClient managedMqttClientSubscriber;

public AwsIotPresenter(IAwsIotView view)
{
this.view = view;
Expand All @@ -38,34 +48,59 @@ public async Task ConnectToAwsIoT()
string signedRequestUrl = awsMqttConnection.SignRequestUrl();

var factory = new MqttFactory();
mqttClient = factory.CreateMqttClient();
mqttClient.Connected += MqttClient_Connected;
mqttClient.ApplicationMessageReceived += MqttClient_ApplicationMessageReceived;

var options = new MqttClientOptions
{
CleanSession = true,
KeepAlivePeriod = TimeSpan.FromSeconds(5)
};

mqttClientOptions = new MqttClientOptionsBuilder()
.WithWebSocketServer(signedRequestUrl)
.WithCleanSession(true)
.WithKeepAlivePeriod(TimeSpan.FromSeconds(5))
.Build();

await mqttClient.ConnectAsync(mqttClientOptions);
Logger.LogInfo("Connected successfully .....");
this.managedMqttClientPublisher = factory.CreateManagedMqttClient();
this.managedMqttClientPublisher.UseApplicationMessageReceivedHandler(this.HandleReceivedApplicationMessage);
this.managedMqttClientPublisher.ConnectedHandler = new MqttClientConnectedHandlerDelegate(OnPublisherConnected);
this.managedMqttClientPublisher.DisconnectedHandler = new MqttClientDisconnectedHandlerDelegate(OnPublisherDisconnected);

await this.managedMqttClientPublisher.StartAsync(
new ManagedMqttClientOptions
{
ClientOptions = mqttClientOptions

});


}
catch (Exception ex)
{
Logger.LogError(ex.Message);
}
}

private void MqttClient_Connected(object sender, MqttClientConnectedEventArgs e)
private void OnPublisherConnected(MqttClientConnectedEventArgs e)
{
view.ConnectStatusLabel = "Connected";
}

private void OnPublisherDisconnected(MqttClientDisconnectedEventArgs x)
{
Logger.LogInfo("Publisher Disconnected");
view.ConnectStatusLabel = "Connection Lost";
}

public async Task PublishMessage(string message, string topic)
{
try
{
await mqttClient.PublishAsync(topic, message, MQTTnet.Protocol.MqttQualityOfServiceLevel.AtLeastOnce, false);
Logger.LogInfo($"Published message: {message}");
if (this.managedMqttClientPublisher != null)
{
await this.managedMqttClientPublisher.PublishAsync(topic, message, MQTTnet.Protocol.MqttQualityOfServiceLevel.AtLeastOnce, false);
Logger.LogInfo($"Published message: {message}");
}
}
catch (Exception ex)
{
Expand All @@ -80,9 +115,9 @@ public async Task SubscribeTo(string topic)
if (lastSubscribedTopic != topic)
{
if (lastSubscribedTopic != null)
await mqttClient.UnsubscribeAsync(lastSubscribedTopic);
await this.managedMqttClientPublisher.UnsubscribeAsync(lastSubscribedTopic);

await mqttClient.SubscribeAsync(topic);
await this.managedMqttClientPublisher.SubscribeAsync(topic);
Logger.LogInfo($"Subscribed to: {topic}");
lastSubscribedTopic = topic;

Expand All @@ -99,7 +134,7 @@ public async Task SubscribeTo(string topic)
}
}

private void MqttClient_ApplicationMessageReceived(object sender, MqttApplicationMessageReceivedEventArgs e)
private void HandleReceivedApplicationMessage(MqttApplicationMessageReceivedEventArgs e)
{
StringBuilder stringBuilder = new StringBuilder();
string payload = Encoding.UTF8.GetString(e.ApplicationMessage.Payload, 0, e.ApplicationMessage.Payload.Length);
Expand All @@ -110,8 +145,8 @@ private void MqttClient_ApplicationMessageReceived(object sender, MqttApplicatio
stringBuilder.AppendLine("QOS: " + e.ApplicationMessage.QualityOfServiceLevel);
stringBuilder.AppendLine("QOS Retain: " + e.ApplicationMessage.Retain);
stringBuilder.AppendLine();

view.ReceivedMessageText = stringBuilder.ToString();
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,15 +48,19 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.8\lib\net45-full\log4net.dll</HintPath>
<Reference Include="log4net, Version=2.0.12.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.12\lib\net45\log4net.dll</HintPath>
</Reference>
<Reference Include="MQTTnet, Version=2.8.5.0, Culture=neutral, PublicKeyToken=b69712f52770c0a7, processorArchitecture=MSIL">
<HintPath>..\packages\MQTTnet.2.8.5\lib\net461\MQTTnet.dll</HintPath>
<Reference Include="MQTTnet, Version=3.0.15.0, Culture=neutral, PublicKeyToken=b69712f52770c0a7, processorArchitecture=MSIL">
<HintPath>..\packages\MQTTnet.3.0.15\lib\net461\MQTTnet.dll</HintPath>
</Reference>
<Reference Include="MQTTnet.Extensions.ManagedClient, Version=3.0.15.0, Culture=neutral, PublicKeyToken=b69712f52770c0a7, processorArchitecture=MSIL">
<HintPath>..\packages\MQTTnet.Extensions.ManagedClient.3.0.15\lib\net461\MQTTnet.Extensions.ManagedClient.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Web" />
<Reference Include="System.Web.Extensions" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="log4net" version="2.0.8" targetFramework="net461" />
<package id="MQTTnet" version="2.8.5" targetFramework="net461" />
<package id="log4net" version="2.0.12" targetFramework="net461" />
<package id="MQTTnet" version="3.0.15" targetFramework="net461" />
<package id="MQTTnet.Extensions.ManagedClient" version="3.0.15" targetFramework="net461" />
</packages>