diff --git a/Game/Source/GameFactory.cs b/Game/Source/GameFactory.cs index e3ab0ca..258aef5 100644 --- a/Game/Source/GameFactory.cs +++ b/Game/Source/GameFactory.cs @@ -5,7 +5,11 @@ namespace Game.Source public class GameFactory : PluginFactory { public string PluginName { get; set; } = "ExamplePlugin"; - public PluginBase CreatePlugin(string map) => new ExamplePlugin(); + public PluginBase CreatePlugin(string map) + { + return new ExamplePlugin(); + } + public AuthorizationManager CreateManager(Configuration configuration) => new GameAuthorizer(configuration); } } \ No newline at end of file diff --git a/Ragon/Sources/Rooms/Room.cs b/Ragon/Sources/Rooms/Room.cs index 63eaea2..df8c167 100755 --- a/Ragon/Sources/Rooms/Room.cs +++ b/Ragon/Sources/Rooms/Room.cs @@ -15,7 +15,7 @@ namespace Ragon.Core public int PlayersMin { get; private set; } public int PlayersMax { get; private set; } public int PlayersCount => _players.Count; - + public string Id { get; private set; } public string Map { get; private set; } private ILogger _logger = LogManager.GetCurrentClassLogger(); @@ -40,7 +40,8 @@ namespace Ragon.Core Map = map; PlayersMin = min; PlayersMax = max; - + Id = Guid.NewGuid().ToString(); + _logger.Info("Room created"); _plugin.Attach(this); } @@ -65,18 +66,23 @@ namespace Ragon.Core _allPlayers = _players.Select(p => p.Key).ToArray(); { - Span data = stackalloc byte[18]; + var idRaw = Encoding.UTF8.GetBytes(Id).AsSpan(); + + Span data = stackalloc byte[idRaw.Length + 18]; Span operationData = data.Slice(0, 2); Span peerData = data.Slice(2, 4); Span ownerData = data.Slice(4, 4); Span minData = data.Slice(10, 4); Span maxData = data.Slice(14, 4); + Span idData = data.Slice(18, idRaw.Length); RagonHeader.WriteUShort((ushort) RagonOperation.JOIN_ROOM, ref operationData); RagonHeader.WriteInt((int) peerId, ref peerData); RagonHeader.WriteInt((int) _owner, ref ownerData); RagonHeader.WriteInt(PlayersMin, ref minData); RagonHeader.WriteInt(PlayersMax, ref maxData); + + idRaw.CopyTo(idData); Send(peerId, data); } diff --git a/Ragon/Sources/Rooms/RoomManager.cs b/Ragon/Sources/Rooms/RoomManager.cs index f96b8f0..cf3c469 100644 --- a/Ragon/Sources/Rooms/RoomManager.cs +++ b/Ragon/Sources/Rooms/RoomManager.cs @@ -94,9 +94,13 @@ namespace Ragon.Core public Room Join(uint peerId, ReadOnlySpan payload) { - var map = Encoding.UTF8.GetString(payload); - var min = 0; - var max = 0; + var minData = payload.Slice(0, 2); + var maxData = payload.Slice(2, 2); + var mapData = payload.Slice(4, payload.Length - 4); + + var map = Encoding.UTF8.GetString(mapData); + var min = RagonHeader.ReadUShort(ref minData); + var max = RagonHeader.ReadUShort(ref maxData); Room room = null; if (_rooms.Count > 0)