server-master/srcs/_plugins/Plugin.Act4/Event/Act4DungeonBroadcastPacketEventHandler.cs
2026-02-10 18:21:30 +01:00

40 lines
No EOL
1.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using PhoenixLib.Events;
using WingsEmu.Game.Act4;
using WingsEmu.Game.Act4.Event;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Networking;
namespace Plugin.Act4.Event;
public class Act4DungeonBroadcastPacketEventHandler : IAsyncEventProcessor<Act4DungeonBroadcastPacketEvent>
{
private readonly IAct4DungeonManager _act4DungeonManager;
public Act4DungeonBroadcastPacketEventHandler(IAct4DungeonManager act4DungeonManager) => _act4DungeonManager = act4DungeonManager;
public async Task HandleAsync(Act4DungeonBroadcastPacketEvent e, CancellationToken cancellation)
{
IReadOnlyDictionary<Guid, DungeonSubInstance> subInstances = e.DungeonInstance.DungeonSubInstances;
if (subInstances.Count < 1)
{
return;
}
DateTime currentTime = DateTime.UtcNow;
foreach (DungeonSubInstance subInstance in subInstances.Values)
{
string packet = null;
foreach (IClientSession session in subInstance.MapInstance.Sessions)
{
packet ??= session.GenerateDungeonPacket(e.DungeonInstance, subInstance, _act4DungeonManager, currentTime);
session.SendPacket(packet);
}
}
}
}