feat: player propeties

This commit is contained in:
2024-05-09 10:50:59 +03:00
parent 5bf1881f81
commit d3ae5a4465
17 changed files with 300 additions and 92 deletions
@@ -1,28 +0,0 @@
using NLog;
using Ragon.Protocol;
using Ragon.Server.IO;
using Ragon.Server.Lobby;
namespace Ragon.Server.Handler
{
public class PlayerPropertiesOperation : BaseOperation
{
private readonly ILogger _logger = LogManager.GetCurrentClassLogger();
public PlayerPropertiesOperation(RagonBuffer reader, RagonBuffer writer) : base(reader, writer)
{
}
public override void Handle(RagonContext context, NetworkChannel channel)
{
if (context.ConnectionStatus == ConnectionStatus.Unauthorized)
{
_logger.Warn($"Player {context.Connection.Id} not authorized for this request");
return;
}
var playerData = Reader.ReadBytes(Reader.Capacity);
context.UserData.Data = playerData;
}
}
}
@@ -0,0 +1,40 @@
using NLog;
using Ragon.Protocol;
using Ragon.Server.IO;
using Ragon.Server.Lobby;
namespace Ragon.Server.Handler
{
public class PlayerUserDataOperation : BaseOperation
{
private readonly ILogger _logger = LogManager.GetCurrentClassLogger();
private readonly int _userDataLimit;
public PlayerUserDataOperation(
RagonBuffer reader,
RagonBuffer writer,
int userDataLimit
) : base(reader, writer)
{
_userDataLimit = userDataLimit;
}
public override void Handle(RagonContext context, NetworkChannel channel)
{
if (context.ConnectionStatus == ConnectionStatus.Unauthorized)
{
_logger.Warn($"Player {context.Connection.Id} not authorized for this request");
return;
}
var playerUserData = Reader.ReadBytes(Reader.Capacity);
if (playerUserData.Length > _userDataLimit)
{
_logger.Warn($"Player {context.Connection.Id} exceeded user data limit");
return;
}
context.UserData.Data = playerUserData;
}
}
}
@@ -21,12 +21,18 @@ using Ragon.Server.Lobby;
namespace Ragon.Server.Handler;
public sealed class RoomPropertiesOperation : BaseOperation
public sealed class RoomUserDataOperation : BaseOperation
{
private readonly ILogger _logger = LogManager.GetCurrentClassLogger();
public RoomPropertiesOperation(RagonBuffer reader, RagonBuffer writer) : base(reader, writer)
private readonly int _userDataLimit;
public RoomUserDataOperation(
RagonBuffer reader,
RagonBuffer writer,
int userDataLimit
) : base(reader, writer)
{
_userDataLimit = userDataLimit;
}
public override void Handle(RagonContext context, NetworkChannel channel)
@@ -36,11 +42,16 @@ public sealed class RoomPropertiesOperation : BaseOperation
_logger.Warn($"Player {context.Connection.Id} not authorized for this request");
return;
}
var roomData = Reader.ReadBytes(Reader.Capacity);
var roomUserData = Reader.ReadBytes(Reader.Capacity);
if (roomUserData.Length > _userDataLimit)
{
_logger.Warn("Room user data is too big");
return;
}
var room = context.Room;
if (room != null)
room.UserData.Data = roomData;
room.UserData.Data = roomUserData;
}
}