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

45 lines
1.2 KiB
C#
Raw 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;
2023-10-07 19:30:52 +03:00
namespace Ragon.Server.Handler;
public class RoomEventOperation : BaseOperation
{
public RoomEventOperation(RagonBuffer reader, RagonBuffer writer) : base(reader, writer)
{
}
2023-10-11 19:37:50 +03:00
public override void Handle(RagonContext context, NetworkChannel channel)
2023-10-07 19:30:52 +03:00
{
var room = context.Room;
var player = context.RoomPlayer;
var eventId = Reader.ReadUShort();
var replicationMode = (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);
Writer.Clear();
Writer.WriteUShort(eventId);
Writer.WriteUShort(player.Connection.Id);
Writer.WriteUShort((ushort) replicationMode);
var sendData = Writer.ToArray();
if (targetMode == RagonTarget.Player && room.Players.TryGetValue(targetPlayerPeerId, out var targetPlayer))
{
targetPlayer.Connection.Reliable.Send(sendData);
return;
}
foreach (var roomPlayer in room.ReadyPlayersList)
roomPlayer.Connection.Reliable.Send(sendData);
}
}