64 lines
1.8 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|