using Application.Domain.Entities; using Application.Models; using Application.Services; using Infrastructure.Data; using Infrastructure.Extensions; using Microsoft.AspNetCore.SignalR; using System; using System.Threading.Tasks; namespace IoTCenter { public class PageHub : Hub { private readonly INodeService _nodeService; public PageHub( INodeService nodeService) { this._nodeService = nodeService; this._nodeService.IsCallback = true; } public override Task OnConnectedAsync() { Console.WriteLine($"{Context.ConnectionId} has connected which request url is {Context.GetHttpContext().Request.GetUrl()}"); this.Groups.AddToGroupAsync(Context.ConnectionId, Context.ConnectionId); if (Context.GetHttpContext().Request.Query.Keys.Contains("group")) { this.Groups.AddToGroupAsync(Context.ConnectionId, Context.GetHttpContext().Request.Query["group"]); } this.Clients.Group(Context.ConnectionId).SendAsync("Connected", Context.ConnectionId); return base.OnConnectedAsync(); } public override Task OnDisconnectedAsync(Exception exception) { Console.WriteLine($"{Context.ConnectionId} has disconnected which request url is {Context.GetHttpContext().Request.GetUrl()}"); return base.OnDisconnectedAsync(exception); } public Task Send(string group, string method, string message) { Console.WriteLine($"PageHub>Send {message} To {group}.{message}"); return Clients.Group(group).SendAsync(method, message); } public Task UpdateCallBack(string method, string message) { if (method == nameof(INodeService.EditNode)) { this._nodeService.EditNode(message.FromJson()); } else if (method == nameof(INodeService.DeleteNode)) { this._nodeService.DeleteNode(message.FromJson()); } else if (method == nameof(INodeService.CreateSence)) { this._nodeService.CreateSence(message.FromJson()); } else if (method == nameof(INodeService.EditSence)) { this._nodeService.EditSence(message.FromJson()); } else if (method == nameof(INodeService.DeleteSence)) { this._nodeService.DeleteSence(message.FromJson()); } else if (method == nameof(INodeService.EditDevice)) { this._nodeService.EditDevice(message.FromJson()); } else if (method == nameof(INodeService.DeleteDevice)) { this._nodeService.DeleteDevice(message.FromJson()); } else if (method == nameof(INodeService.CreateCommand)) { this._nodeService.CreateCommand(message.FromJson()); } else if (method == nameof(INodeService.EditCommand)) { this._nodeService.EditCommand(message.FromJson()); } else if (method == nameof(INodeService.DeleteCommand)) { this._nodeService.DeleteCommand(message.FromJson()); } return Task.CompletedTask; } } }