server-master/srcs/GameChannel/Consumers/PlayerConnectedChannelGameConsumer.cs
2026-02-10 18:21:30 +01:00

46 lines
No EOL
1.7 KiB
C#

using System.Threading;
using System.Threading.Tasks;
using PhoenixLib.ServiceBus;
using WingsAPI.Communication.Player;
using WingsEmu.Game.Characters.Events;
using WingsEmu.Game.Managers;
using WingsEmu.Game.Networking;
using WingsEmu.Plugins.DistributedGameEvents.PlayerEvents;
namespace GameChannel.Consumers
{
public class PlayerConnectedChannelGameConsumer : IMessageConsumer<PlayerConnectedOnChannelMessage>
{
private readonly IServerManager _serverManager;
private readonly ISessionManager _sessionManager;
public PlayerConnectedChannelGameConsumer(ISessionManager sessionManager, IServerManager serverManager)
{
_sessionManager = sessionManager;
_serverManager = serverManager;
}
public async Task HandleAsync(PlayerConnectedOnChannelMessage e, CancellationToken cancellation)
{
IClientSession session = _sessionManager.GetSessionByCharacterId(e.CharacterId);
if (session != null)
{
await session.NotifyStrangeBehavior(StrangeBehaviorSeverity.DANGER, $"Looks like {e.CharacterName} was connected from {e.ChannelId} while being on {_serverManager.ChannelId}");
session.ForceDisconnect();
return;
}
_sessionManager.AddOnline(new ClusterCharacterInfo
{
Id = e.CharacterId,
Class = e.Class,
Gender = e.Gender,
Level = e.Level,
Name = e.CharacterName,
ChannelId = (byte?)e.ChannelId,
HeroLevel = e.HeroLevel,
HardwareId = e.HardwareId
});
}
}
}