using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; using Microsoft.Extensions.Logging; using xCommons.Attributes; using xCommons.Configurations; using xCommons.Extensions; using xCommons.Providers; using xDataService.Interfaces; using xIdentityService.Controllers; using xIdentityService.Interfaces; using xModels.Base; using xPushService.Base; using xPushService.Constants; namespace xApi.Base { [ApiController] [ApiVersion("1.0")] [RequireXPowered(true)] [Route("api/v{version:apiVersion}/entities/[controller]")] public abstract class XIBaseV1EntityController : XIBaseEntityController where TEntity : XBaseEntity { // #region Constructor ... protected XIBaseV1EntityController( ILogger> logger, XAppConfiguration appConfiguration, IXIdentityProvider identityProvider, XValidationProvider validationProvider, IXBaseRepository repository ) : base( logger, appConfiguration, identityProvider, validationProvider, repository ) { } #endregion } public abstract class XIBaseV1EntityHubController : XIBaseV1EntityController where TEntity : XBaseEntity { // #region Props ... public IHubContext> Hub { get; } #endregion // #region Constructor ... protected XIBaseV1EntityHubController( ILogger> logger, XAppConfiguration appConfiguration, IXIdentityProvider identityProvider, XValidationProvider validationProvider, IXBaseRepository repository, IHubContext> hub = null ) : base( logger, appConfiguration, identityProvider, validationProvider, repository ) { Hub = hub; } #endregion // #region Hub ... [NonAction] public async Task SendPush( string action, string payLoad ) { // var actions = new List { XBaseEntityHubAction.Add.GetStringValue(), XBaseEntityHubAction.Update.GetStringValue(), XBaseEntityHubAction.Delete.GetStringValue(), XBaseEntityHubAction.AddMany.GetStringValue(), XBaseEntityHubAction.DeleteMany.GetStringValue(), XBaseEntityHubAction.UpdateMany.GetStringValue(), XBaseEntityHubAction.AddOrUpdate.GetStringValue(), }; // // Validate ... var isValid = !Hub.IsNull() && !action.IsNullOrEmpty() && !payLoad.IsNullOrEmpty() && actions.Contains(action); if (!isValid) { return; } // // Retrieve Connection Id ... var connectionId = GetConnectionId(); var clients = Hub.Clients.All; if (!connectionId.IsNullOrEmpty()) { clients = Hub.Clients.AllExcept(connectionId); } // await clients.SendAsync(action, payLoad, connectionId); } #endregion } }