server-master/srcs/_plugins/WingsEmu.Plugins.BasicImplementation/InterChannel/Event/InterChannelSendChatMsgByNicknameEventHandler.cs
2026-02-10 18:21:30 +01:00

50 lines
No EOL
1.9 KiB
C#

using System.Threading;
using System.Threading.Tasks;
using PhoenixLib.Events;
using PhoenixLib.ServiceBus;
using WingsEmu.Game._i18n;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.InterChannel;
using WingsEmu.Game.Managers;
using WingsEmu.Game.Networking;
using WingsEmu.Plugins.DistributedGameEvents.InterChannel;
namespace WingsEmu.Plugins.BasicImplementations.InterChannel.Event;
public class InterChannelSendChatMsgByNicknameEventHandler : IAsyncEventProcessor<InterChannelSendChatMsgByNicknameEvent>
{
private readonly IGameLanguageService _languageService;
private readonly IMessagePublisher<InterChannelSendChatMsgByNicknameMessage> _messagePublisher;
private readonly ISessionManager _sessionManager;
public InterChannelSendChatMsgByNicknameEventHandler(ISessionManager sessionManager, IGameLanguageService languageService,
IMessagePublisher<InterChannelSendChatMsgByNicknameMessage> messagePublisher)
{
_sessionManager = sessionManager;
_languageService = languageService;
_messagePublisher = messagePublisher;
}
public async Task HandleAsync(InterChannelSendChatMsgByNicknameEvent e, CancellationToken cancellation)
{
IClientSession localSession = _sessionManager.GetSessionByCharacterName(e.Nickname);
if (localSession == null)
{
if (!_sessionManager.IsOnline(e.Nickname))
{
return;
}
await _messagePublisher.PublishAsync(new InterChannelSendChatMsgByNicknameMessage
{
Nickname = e.Nickname,
DialogKey = e.DialogKey,
ChatMessageColorType = e.ChatMessageColorType
}, cancellation);
return;
}
localSession.SendChatMessage(_languageService.GetLanguage(e.DialogKey, localSession.UserLanguage), e.ChatMessageColorType);
}
}