//
// 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;
}
}