using AyCode.Core.Extensions; using AyCode.Utils.Extensions; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; using Nop.Core; using Nop.Plugin.Misc.AuctionPlugin.Domains.Dtos; using Nop.Plugin.Misc.AuctionPlugin.Domains.Enums; using Nop.Plugin.Misc.AuctionPlugin.Hubs; using Nop.Plugin.Misc.AuctionPlugin.Hubs.Messages; using Nop.Plugin.Misc.AuctionPlugin.Services; using Nop.Services.Cms; using Nop.Services.Logging; using Nop.Web.Framework.Components; using Nop.Web.Framework.Infrastructure; namespace Nop.Plugin.Misc.AuctionPlugin.Components { [ViewComponent(Name = "LiveAnnouncement")] public class LiveAnnouncementViewComponent(ILogger logger, ILockService lockService, IWorkContext workContext, IWidgetPluginManager widgetPluginManager, AuctionService auctionService, IHubContext auctionHubContext) : NopViewComponent { public async Task InvokeAsync(string widgetZone, object additionalData) { var customer = await workContext.GetCurrentCustomerAsync(); //await logger.InformationAsync($"LiveAnnouncementViewComponent.InvokeAsync(); Before lock; widgetZone: {widgetZone}", null, customer); //using (await lockService.SemaphoreSlim.UseWaitAsync()) //{ // await logger.InformationAsync($"LiveAnnouncementViewComponent.InvokeAsync(); Enter lock; widgetZone: {widgetZone}", null, customer); // await Task.Delay(1000); // var auctions = await auctionService.GetAllCurrentAutoOpenAndClosedAuctionsAsync(); // if (auctions.Count > 0) // { // await logger.InformationAsync($"LiveAnnouncementViewComponent.InvokeAsync(); auctions.Count > 0; count: {auctions.Count}; names: {string.Join("; ", auctions.Select(x => x.AuctionName))}"); // var statusChangedMessageWrapper = new MessageWrapper // { // MessageType = nameof(ProductToAuctionStatusNotification), // SenderId = 0, // ResponseType = ResponseType.ToAllClients // }; // foreach (var auction in auctions) // { // auction.Closed = false; // await auctionService.UpdateAuctionAsync(auction); // var auctionDto = new AuctionDto(auction); // var productToAuctions = (await auctionService.GetProductToAuctionsByAuctionIdAsync(auction.Id, false)).Where(x => x.AuctionStatus == AuctionStatus.None).ToList(); // foreach (var productToAuction in productToAuctions) // { // productToAuction.AuctionStatus = AuctionStatus.Active; // auctionDto.ProductToAuctionDtos.Add(new ProductToAuctionDto(productToAuction)); // ////TEMPOPRARY - J. // //statusChangedMessageWrapper.Data = new ProductToAuctionStatusNotification(auctionDto, 0, $"Az aukciót megnyitottuk: {auction.AuctionName}").ToJson(); // //await _auctionHubContext.Clients.All.SendAsync("send", statusChangedMessageWrapper.ToJson()); // ////TEMPOPRARY - J. // } // await auctionService.UpdateProductToAuctionMappingAsync(productToAuctions); // statusChangedMessageWrapper.Data = new ProductToAuctionStatusNotification(auctionDto, 0, $"Az aukciót megnyitottuk: {auction.AuctionName}").ToJson(); // await auctionHubContext.Clients.All.SendAsync("send", statusChangedMessageWrapper.ToJson()); // } // } // await logger.InformationAsync($"LiveAnnouncementViewComponent.InvokeAsync(); Exit lock; widgetZone: {widgetZone}", null, customer); //} await logger.InformationAsync($"SignalR Widget called customer: {customer.Email}"); if (!await widgetPluginManager.IsPluginActiveAsync(AuctionDefaults.SystemName, customer)) return Content(string.Empty); await logger.InformationAsync("SignalR Widget: widget active"); if (!widgetZone.Equals(PublicWidgetZones.BodyStartHtmlTagAfter)) return Content(string.Empty); return View("~/Plugins/Misc.AuctionPlugin/Views/LiveAnnouncement.cshtml"); } } }