Files

47 lines
1.3 KiB
C#
Raw Permalink Normal View History

2023-10-07 19:30:52 +03:00
using Ragon.Protocol;
using Ragon.Server.Event;
2023-10-11 19:37:50 +03:00
using Ragon.Server.IO;
using Ragon.Server.Lobby;
using Ragon.Server.Logging;
2023-10-07 19:30:52 +03:00
namespace Ragon.Server.Handler;
public class RoomEventOperation : BaseOperation
{
private readonly IRagonLogger _logger = LoggerManager.GetLogger(nameof(RoomEventOperation));
2024-09-28 20:11:56 +03:00
public RoomEventOperation(RagonStream reader, RagonStream writer) : base(reader, writer)
2023-10-07 19:30:52 +03:00
{
}
2023-10-11 19:37:50 +03:00
public override void Handle(RagonContext context, NetworkChannel channel)
2023-10-07 19:30:52 +03:00
{
if (context.ConnectionStatus == ConnectionStatus.Unauthorized)
{
_logger.Warning($"Player {context.Connection.Id} not authorized for this request");
return;
}
2023-10-07 19:30:52 +03:00
var room = context.Room;
var player = context.RoomPlayer;
var eventId = Reader.ReadUShort();
var eventMode = (RagonReplicationMode)Reader.ReadByte();
2023-10-07 19:30:52 +03:00
var targetMode = (RagonTarget)Reader.ReadByte();
var targetPlayerPeerId = (ushort)0;
2023-10-07 19:30:52 +03:00
if (targetMode == RagonTarget.Player)
targetPlayerPeerId = Reader.ReadUShort();
var @event = new RagonEvent(player, eventId);
@event.Read(Reader);
if (targetMode == RagonTarget.Player && room.Players.TryGetValue(targetPlayerPeerId, out var targetPlayer))
{
room.ReplicateEvent(player, @event, eventMode, targetPlayer);
2023-10-07 19:30:52 +03:00
return;
}
room.ReplicateEvent(player, @event, eventMode, targetMode);
2023-10-07 19:30:52 +03:00
}
}