using Application.Domain.Entities; using Application.Models; using Infrastructure.Data; using Infrastructure.Extensions; using IoTCenter.Services; using IoTShared.Services; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; namespace IoTCenter.Controllers { public class CommandController : Controller { private readonly ILogger _logger; private readonly IHttpClientFactory _httpClientFactory; private readonly IRepository _deviceRepo; private readonly IRepository _sceneRepo; private readonly IHubContext _pageHubContext; public CommandController(ILogger logger, IHttpClientFactory httpClientFactory, IRepository deviceRepo, IRepository scene, IHubContext pageHubContext) { this._logger = logger; this._httpClientFactory = httpClientFactory; this._deviceRepo = deviceRepo; this._sceneRepo = scene; this._pageHubContext = pageHubContext; } public IActionResult Exec(string connectionId, string node, string cmd, Guid id) { try { var query = string.Empty; foreach (var item in Request.Query.Where(o => o.Key != "node" && o.Key != "cmd" && !o.Key.StartsWith("id"))) { query = query.SetParam(item.Key, item.Value); } this._pageHubContext.Clients.Group(node).SendAsync(nameof(INodeService.Exec), connectionId, id, cmd, query); return Json(ApiResponse.AsyncSuccess()); } catch (Exception ex) { ex.PrintStack(); return Json(ApiResponse.Error(ex)); } } public IActionResult ExecAll(string connectionId, string node, string cmd, List id) { try { var query = string.Empty; foreach (var item in Request.Query.Where(o => o.Key != "node" && o.Key != "cmd" && !o.Key.StartsWith("id["))) { query = query.SetParam(item.Key, item.Value); } this._pageHubContext.Clients.Group(node).SendAsync(nameof(INodeService.ExecAll), connectionId, id, cmd, query); return Json(ApiResponse.AsyncSuccess()); } catch (Exception ex) { ex.PrintStack(); return Json(ApiResponse.Error(ex)); } } public IActionResult Scene(string connectionId, string node, Guid id) { try { this._pageHubContext.Clients.Group(node).SendAsync(nameof(INodeService.Scene), connectionId, id); return Json(ApiResponse.AsyncSuccess()); } catch (Exception ex) { ex.PrintStack(); return Json(ApiResponse.Error(ex)); } } } }