Update mqtt controller

This commit is contained in:
Thomas Fransolet 2021-01-04 15:15:35 +01:00
parent 5b4355d43c
commit fda53da013
3 changed files with 60 additions and 29 deletions

View File

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace MyCore.Interfaces.DTO
{
public class MqttMessageDTO
{
public string Topic { get; set; }
public string Message { get; set; }
public bool Online{ get; set; }
}
}

View File

@ -5,54 +5,72 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Mqtt.Client.AspNetCore.Services;
using MQTTnet; using MQTTnet;
using MQTTnet.Client; using MQTTnet.Client;
using MQTTnet.Client.Options; using MQTTnet.Client.Options;
using MyCore.Interfaces.DTO;
namespace MyCore.Controllers namespace MyCore.Controllers
{ {
[Authorize(Roles = "Admin")] [Authorize] // TODO role (Roles = "Admin")]
[Route("api/mqtt")] [Route("api/mqtt")]
[ApiController] [ApiController]
public class MQTTController : ControllerBase public class MQTTController : ControllerBase
{ {
private string _mqttServer = "192.168.31.140"; private readonly IMqttClientService _mqttClientService;
/// <summary> private readonly IMqttOnlineClientService _mqttOnlineClientService;
/// It's a mqtt publish test ! :)
/// </summary> public MQTTController(MqttClientServiceProvider provider, MqttClientOnlineServiceProvider onlineProvider)
[AllowAnonymous]
[HttpGet]
public void GetToPublishMqtt()
{ {
Client_Publish().ContinueWith(res => { this._mqttClientService = provider.MqttClientService;
if (res.Status == TaskStatus.RanToCompletion) this._mqttOnlineClientService = onlineProvider.MqttOnlineClientService;
{
Console.WriteLine("It's a success !");
}
else
{
Console.WriteLine("We have an issue here.. ");
}
});
} }
protected async Task Client_Publish()
{
var server = new MqttFactory().CreateMqttServer();
/// <summary>
/// Publish mqtt test
/// </summary>
/// <param name="mqttMessageDTO">Message to send</param>
[ProducesResponseType(typeof(bool), 200)]
[HttpPost]
public async Task<ObjectResult> PublishMessage([FromBody] MqttMessageDTO mqttMessageDTO)
{
try try
{ {
var client1 = new MqttFactory().CreateMqttClient(); if (mqttMessageDTO == null)
await client1.ConnectAsync(new MqttClientOptionsBuilder().WithTcpServer(_mqttServer).Build()); throw new KeyNotFoundException("message is null");
var message = new MqttApplicationMessageBuilder().WithPayload("It's a test").WithTopic("IpAddress").WithRetainFlag().Build();
await client1.PublishAsync(message);
await Task.Delay(500); bool isSucess = false;
await MqttClientService.PublishMessage(mqttMessageDTO.Topic, mqttMessageDTO.Message).ContinueWith(res => {
if (res.Status == TaskStatus.RanToCompletion)
{
isSucess = true;
}
});
if (mqttMessageDTO.Online)
{
await MqttClientOnlineService.PublishMessage(mqttMessageDTO.Topic, mqttMessageDTO.Message).ContinueWith(res => {
if (res.Status == TaskStatus.RanToCompletion)
{
isSucess = true;
}
else
{
isSucess = false;
}
});
}
return new OkObjectResult(isSucess);
} }
finally catch (Exception ex)
{ {
await server.StopAsync(); return new ObjectResult(ex.Message) { StatusCode = 500 };
} }
} }
} }

View File

@ -203,7 +203,7 @@ namespace MyCore
services.AddScoped<DeviceDatabaseService>(); services.AddScoped<DeviceDatabaseService>();
services.AddScoped<LocationDatabaseService>(); services.AddScoped<LocationDatabaseService>();
services.AddMqttClientHostedService(); services.AddMqttClientHostedService(); // Todo client files (a lot are useless)
services.AddMqttClientOnlineHostedService(); services.AddMqttClientOnlineHostedService();
} }