using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Mqtt.Client.AspNetCore.Services; using MQTTnet; using MQTTnet.Client; using MQTTnet.Client.Options; using MyCore.Interfaces.DTO; namespace MyCore.Controllers { [Authorize] // TODO role (Roles = "Admin")] [Route("api/mqtt")] [ApiController] public class MQTTController : ControllerBase { private readonly IMqttClientService _mqttClientService; private readonly IMqttOnlineClientService _mqttOnlineClientService; public MQTTController(MqttClientServiceProvider provider, MqttClientOnlineServiceProvider onlineProvider) { this._mqttClientService = provider.MqttClientService; this._mqttOnlineClientService = onlineProvider.MqttOnlineClientService; } /// /// Publish mqtt test /// /// Message to send [ProducesResponseType(typeof(bool), 200)] [HttpPost] public async Task PublishMessage([FromBody] MqttMessageDTO mqttMessageDTO) { try { if (mqttMessageDTO == null) throw new KeyNotFoundException("message is null"); 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); } catch (Exception ex) { return new ObjectResult(ex.Message) { StatusCode = 500 }; } } } }