Files
Ragon/Ragon.Server/Sources/Handler/RoomEventOperation.cs
T

47 lines
1.3 KiB
C#

using Ragon.Protocol;
using Ragon.Server.Event;
using Ragon.Server.IO;
using Ragon.Server.Lobby;
using Ragon.Server.Logging;
namespace Ragon.Server.Handler;
public class RoomEventOperation : BaseOperation
{
private readonly IRagonLogger _logger = LoggerManager.GetLogger(nameof(RoomEventOperation));
public RoomEventOperation(RagonBuffer reader, RagonBuffer writer) : base(reader, writer)
{
}
public override void Handle(RagonContext context, NetworkChannel channel)
{
if (context.ConnectionStatus == ConnectionStatus.Unauthorized)
{
_logger.Warning($"Player {context.Connection.Id} not authorized for this request");
return;
}
var room = context.Room;
var player = context.RoomPlayer;
var eventId = Reader.ReadUShort();
var eventMode = (RagonReplicationMode)Reader.ReadByte();
var targetMode = (RagonTarget)Reader.ReadByte();
var targetPlayerPeerId = (ushort)0;
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);
return;
}
room.ReplicateEvent(player, @event, eventMode, targetMode);
}
}