using AyCode.Core.Extensions; using AyCode.Core.Loggers; using AyCode.Core.Serializers.Binaries; using AyCode.Core.Serializers.Jsons; using AyCode.Models.Server.DynamicMethods; using AyCode.Services.SignalRs; using FruitBank.Common.Interfaces; using FruitBank.Common.Loggers; using FruitBank.Common.Server.Interfaces; using FruitBank.Common.SignalRs; using Mango.Nop.Core.Loggers; using Microsoft.Extensions.Configuration; namespace FruitBank.Common.Server.Services.SignalRs; public class DevAdminSignalRHub : AcWebSignalRHubWithSessionBase> { private readonly IFruitBankDataControllerServer _fruitBankDataController; public DevAdminSignalRHub(IConfiguration configuration, IFruitBankDataControllerServer fruitBankDataController/*, SessionService sessionService*/, ICustomOrderSignalREndpointServer customOrderSignalREndpoint, IStockSignalREndpointServer stockSignalREndpointServer, IEnumerable logWriters) : base(configuration, new Logger(logWriters.ToArray())) { _fruitBankDataController = fruitBankDataController; EnableBinaryDiagnostics = FruitBankConstClient.SignalRSerializerDiagnosticLog; SerializerOptions = new AcBinarySerializerOptions(); // Use the new lazy Registry - no reflection at construction time DynamicMethodRegistry.CahcheSizeCapacity = 3; DynamicMethodRegistry.Register(fruitBankDataController); DynamicMethodRegistry.Register(customOrderSignalREndpoint); DynamicMethodRegistry.Register(stockSignalREndpointServer); } /// /// ENV-announce (push-on-connect): minden új kapcsolat azonnal megkapja a szerver PROD/DEV besorolását /// (ServerEnvironment tag). A kliens a tárolt értékével veti össze — eltérés (= a szerver restart közben /// MÁSIK DB-re állt) esetén riaszt. Így a kliensnek NEM kell reconnectkor újra lekérdeznie ("csak az elején 1x"). /// Best-effort: hibája nem dönti be a kapcsolatot — az autoritatív kapu a kliens első-connect lekérdezése. /// public override async Task OnConnectedAsync() { await base.OnConnectedAsync(); try { var signalParams = new SignalParams { Status = SignalResponseStatus.Success, DataSerializerType = AyCode.Core.Serializers.AcSerializerType.Binary }; await Clients.Caller.OnReceiveMessage(SignalRTags.ServerEnvironment, null, signalParams, await _fruitBankDataController.IsProdEnvironment()); } catch (Exception ex) { Logger.Error($"ServerEnvironment announce failed; ConnectionId: {Context.ConnectionId}", ex); } } protected override void LogContextUserNameAndId() { return; base.LogContextUserNameAndId(); } // ...existing commented code... }