using AyCode.Core.Extensions; using AyCode.Core.Helpers; using AyCode.Core.Loggers; using AyCode.Core.Serializers.Jsons; using AyCode.Services.SignalRs; using Microsoft.AspNetCore.SignalR; namespace AyCode.Services.Server.SignalRs; public abstract class AcSignalRSendToClientService(IHubContext signalRHub, IAcLoggerBase logger) where TSignalRHub: Hub, IAcSignalRHubServer where TSignalRTags : AcSignalRTags where TLogger : IAcLoggerBase { protected IAcLoggerBase Logger => logger; protected virtual async Task SendMessageToClient(IAcSignalRHubItemServer sendTo, int messageTag, object? content) { var response = new SignalResponseDataMessage(messageTag, SignalResponseStatus.Success, content, AcJsonSerializerOptions.Default); var responseBytes = response.ToBinary(); Logger.Info($"[{responseBytes.Length / 1024}kb] Server sending to client; {ConstHelper.NameByValue(messageTag)}"); await sendTo.OnReceiveMessage(messageTag, responseBytes, null); } public virtual Task SendMessageToAllClients(int messageTag, object? content) => SendMessageToClient(signalRHub.Clients.All, messageTag, content); public virtual Task SendMessageToConnection(string connectionId, int messageTag, object? content) => SendMessageToClient(signalRHub.Clients.Client(connectionId), messageTag, content); public virtual Task SendMessageToConnections(IEnumerable connectionIds, int messageTag, object? content) => SendMessageToClient(signalRHub.Clients.Clients(connectionIds), messageTag, content); public virtual Task SendMessageToUser(string user, int messageTag, object? content) => SendMessageToClient(signalRHub.Clients.User(user), messageTag, content); public virtual Task SendMessageToUsers(IEnumerable users, int messageTag, object? content) => SendMessageToClient(signalRHub.Clients.Users(users), messageTag, content); }