diff --git a/Ragon.Client/Sources/RagonPlayer.cs b/Ragon.Client/Sources/RagonPlayer.cs index 9d7a842..023d467 100644 --- a/Ragon.Client/Sources/RagonPlayer.cs +++ b/Ragon.Client/Sources/RagonPlayer.cs @@ -26,8 +26,7 @@ namespace Ragon.Client public ushort PeerId { get; set; } public bool IsRoomOwner { get; set; } public bool IsLocal { get; set; } - - public IRagonSerializable Data { get; set; } + public byte[] Data { get; private set; } public RagonPlayer(ushort peerId, string playerId, string name, bool isRoomOwner, bool isLocal) { @@ -37,5 +36,10 @@ namespace Ragon.Client Name = name; Id = playerId; } + + public void SetData(byte[] data) + { + Data = data; + } } } \ No newline at end of file diff --git a/Ragon.Server/Sources/Data/RagonData.cs b/Ragon.Server/Sources/Data/RagonData.cs new file mode 100644 index 0000000..cc726e9 --- /dev/null +++ b/Ragon.Server/Sources/Data/RagonData.cs @@ -0,0 +1,23 @@ +using Ragon.Protocol; + +namespace Ragon.Server.Data; + +public class RagonData +{ + private byte[] _data = Array.Empty(); + public bool IsDirty { get; set; } + public byte[] Data + { + get => _data; + set + { + _data = value; + IsDirty = true; + } + } + + public RagonData(byte[] data) + { + _data = data; + } +} \ No newline at end of file diff --git a/Ragon.Server/Sources/Handler/AuthorizationOperation.cs b/Ragon.Server/Sources/Handler/AuthorizationOperation.cs index 791944f..14fa24d 100644 --- a/Ragon.Server/Sources/Handler/AuthorizationOperation.cs +++ b/Ragon.Server/Sources/Handler/AuthorizationOperation.cs @@ -86,6 +86,7 @@ public sealed class AuthorizationOperation: BaseOperation var playerId = context.LobbyPlayer.Id; var playerName = context.LobbyPlayer.Name; + var playerPayload = context.LobbyPlayer.Payload; _writer.Clear(); diff --git a/Ragon.Server/Sources/Handler/PlayerDataOperation.cs b/Ragon.Server/Sources/Handler/PlayerDataOperation.cs index 9dd5877..e28c0b7 100644 --- a/Ragon.Server/Sources/Handler/PlayerDataOperation.cs +++ b/Ragon.Server/Sources/Handler/PlayerDataOperation.cs @@ -24,9 +24,20 @@ namespace Ragon.Server.Handler var playerDataLen = Reader.ReadUShort(); var playerData = Reader.ReadBytes(playerDataLen); - var player = context.RoomPlayer; - // player.SetData(playerData); + var roomPlayer = context.RoomPlayer; + if (roomPlayer != null) + { + roomPlayer.UserData.Data = playerData; + return; + } + + var lobbyPlayer = context.RoomPlayer; + if (lobbyPlayer != null) + { + lobbyPlayer.UserData.Data = playerData; + } + } } } \ No newline at end of file diff --git a/Ragon.Server/Sources/Lobby/RagonLobbyPlayer.cs b/Ragon.Server/Sources/Lobby/RagonLobbyPlayer.cs index 69377eb..e2ff1a0 100644 --- a/Ragon.Server/Sources/Lobby/RagonLobbyPlayer.cs +++ b/Ragon.Server/Sources/Lobby/RagonLobbyPlayer.cs @@ -14,6 +14,7 @@ * limitations under the License. */ +using Ragon.Server.Data; using Ragon.Server.IO; namespace Ragon.Server.Lobby; @@ -30,13 +31,14 @@ public class RagonLobbyPlayer public INetworkConnection Connection { get; } public string Id { get; private set; } public string Name { get; private set; } - public string Payload { get; private set; } - public RagonLobbyPlayer(INetworkConnection connection, string id, string name, string payload) + public RagonData UserData { get; private set; } + + public RagonLobbyPlayer(INetworkConnection connection, string id, string name, byte[] payload) { Id = id; Name = name; - Payload = payload; Connection = connection; + UserData = new RagonData(payload); } } \ No newline at end of file diff --git a/Ragon.Server/Sources/Plugin/Web/RagonWebHookPlugin.cs b/Ragon.Server/Sources/Plugin/Web/RagonWebHookPlugin.cs index 37048a6..9c23c2e 100644 --- a/Ragon.Server/Sources/Plugin/Web/RagonWebHookPlugin.cs +++ b/Ragon.Server/Sources/Plugin/Web/RagonWebHookPlugin.cs @@ -16,6 +16,7 @@ using System.Net; using System.Net.Http.Json; +using System.Text; using Newtonsoft.Json; using Ragon.Protocol; using Ragon.Server.Handler; @@ -58,7 +59,8 @@ public class RagonWebHookPlugin var authorizationResponse = JsonConvert.DeserializeObject(content); if (authorizationResponse != null) { - var lobbyPlayer = new RagonLobbyPlayer(context.Connection, authorizationResponse.Id, authorizationResponse.Name, authorizationResponse.Payload); + var bytes = Encoding.UTF8.GetBytes(authorizationResponse.Payload); + var lobbyPlayer = new RagonLobbyPlayer(context.Connection, authorizationResponse.Id, authorizationResponse.Name, bytes); context.SetPlayer(lobbyPlayer); authorizationOperation.Approve(context); diff --git a/Ragon.Server/Sources/Room/RagonRoomPlayer.cs b/Ragon.Server/Sources/Room/RagonRoomPlayer.cs index b40637a..b69ec89 100644 --- a/Ragon.Server/Sources/Room/RagonRoomPlayer.cs +++ b/Ragon.Server/Sources/Room/RagonRoomPlayer.cs @@ -14,6 +14,7 @@ * limitations under the License. */ +using Ragon.Server.Data; using Ragon.Server.Entity; using Ragon.Server.IO; @@ -29,12 +30,15 @@ public class RagonRoomPlayer public RagonRoom Room { get; private set; } public RagonEntityCache Entities { get; private set; } + public RagonData UserData { get; private set; } + public RagonRoomPlayer(INetworkConnection connection, string id, string name) { Id = id; Name = name; Connection = connection; Entities = new RagonEntityCache(); + UserData = new RagonData(Array.Empty()); } public void AttachEntity(RagonEntity entity)