Files
BuYuHouDuan/UserSrc/UserService/Hubs/ConfigChangedSubscriber.cs
T
2026-10-12 16:22:04 +08:00

64 lines
1.8 KiB
C#

using CommonDomain;
using DotNetCore.CAP;
using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.Logging;
namespace UserService.Hubs
{
public class ConfigChangedSubscriber : ICapSubscribe
{
private readonly IHubContext<LoginHub> _hubContext;
private readonly ILogger<ConfigChangedSubscriber> _logger;
public ConfigChangedSubscriber(
IHubContext<LoginHub> hubContext,
ILogger<ConfigChangedSubscriber> logger)
{
_hubContext = hubContext;
_logger = logger;
}
[CapSubscribe(TopicKeys.配置变更)]
public async Task HandleConfigChanged(ConfigChangedMessage message)
{
var receivedAt = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
var deliveryDelayMs = message.PublishedAtUnixMs > 0
? receivedAt - message.PublishedAtUnixMs
: -1;
var changeType = message.ConfigType switch
{
"ActivityConfig" => 1,
"GameConfig" => 2,
_ => 0
};
if (changeType == 0)
{
return;
}
try
{
await _hubContext.Clients.All.SendAsync("ChangeConfig", changeType);
var effectiveAt = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
}
catch (Exception ex)
{
_logger.LogError(
ex,
"[ChangeConfig] LoginHub全员通知失败 operationId={OperationId} ConfigType={ConfigType} changeType={ChangeType} event=ChangeConfig result=Failed",
message.OperationId,
message.ConfigType,
changeType);
throw;
}
}
}
}