// // FcResponder.cs // // Copyright (c) František Boháček. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. using NosSmooth.Core.Packets; using NosSmooth.Game.Data.Act4; using NosSmooth.Game.Events.Act4; using NosSmooth.Game.Events.Core; using NosSmooth.Packets.Server.Act4; using Remora.Results; namespace NosSmooth.Game.PacketHandlers.Act4; /// /// Responds to . /// public class FcResponder : IPacketResponder { private readonly EventDispatcher _eventDispatcher; /// /// Initializes a new instance of the class. /// /// The event dispatcher. public FcResponder(EventDispatcher eventDispatcher) { _eventDispatcher = eventDispatcher; } /// public Task Respond(PacketEventArgs packetArgs, CancellationToken ct = default) { var packet = packetArgs.Packet; return _eventDispatcher.DispatchEvent ( new Act4StatusReceivedEvent ( packet.Faction, packet.MinutesUntilReset, GetStatus(packet.AngelState), GetStatus(packet.DemonState) ), ct ); } private Act4FactionStatus GetStatus(FcSubPacket packet) { return new Act4FactionStatus ( packet.Percentage, packet.Mode, packet.CurrentTime, packet.TotalTime, GetRaid(packet) ); } private Act4Raid? GetRaid(FcSubPacket packet) { if (packet.IsBerios) { return Act4Raid.Berios; } if (packet.IsCalvina) { return Act4Raid.Calvina; } if (packet.IsHatus) { return Act4Raid.Hatus; } if (packet.IsMorcos) { return Act4Raid.Morcos; } return null; } }