From e2032f381a60e47d4c099ecedaad56686a54a7dc Mon Sep 17 00:00:00 2001 From: Edmand46 Date: Sun, 31 Jul 2022 09:37:05 +0400 Subject: [PATCH] refactor: added error message on creation or joining to room --- Ragon/Sources/Lobby/Lobby.cs | 27 +++++++++++++++++++++++++++ Ragon/Sources/Room/RoomManager.cs | 6 +++--- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/Ragon/Sources/Lobby/Lobby.cs b/Ragon/Sources/Lobby/Lobby.cs index 2113262..8ae052b 100644 --- a/Ragon/Sources/Lobby/Lobby.cs +++ b/Ragon/Sources/Lobby/Lobby.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using NetStack.Serialization; using NLog; using Ragon.Common; @@ -13,12 +14,14 @@ public class Lobby : ILobby private readonly BitBuffer _buffer; private readonly RoomManager _roomManager; private readonly AuthorizationManager _authorizationManager; + private readonly IGameThread _gameThread; public AuthorizationManager AuthorizationManager => _authorizationManager; public Lobby(IAuthorizationProvider provider, RoomManager manager, IGameThread gameThread) { _roomManager = manager; + _gameThread = gameThread; _buffer = new BitBuffer(); _serializer = new RagonSerializer(); _authorizationManager = new AuthorizationManager(provider, gameThread, this, _serializer); @@ -50,6 +53,17 @@ public class Lobby : ILobby case RagonOperation.JOIN_ROOM: { var roomId = _serializer.ReadString(); + roomId = _serializer.ReadString(); + var exists = _roomManager.Rooms.Any(r => r.Id == roomId); + if (!exists) + { + _serializer.Clear(); + _serializer.WriteOperation(RagonOperation.JOIN_FAILED); + _serializer.WriteString($"Room with id {roomId} not exists"); + var sendData = _serializer.ToArray(); + _gameThread.Server.Send(peerId, sendData, DeliveryType.Reliable); + return; + } if (_roomManager.RoomsBySocket.ContainsKey(peerId)) _roomManager.Left(player, Array.Empty()); @@ -62,7 +76,20 @@ public class Lobby : ILobby var roomId = Guid.NewGuid().ToString(); var custom = _serializer.ReadBool(); if (custom) + { roomId = _serializer.ReadString(); + var exists = _roomManager.Rooms.Any(r => r.Id == roomId); + if (exists) + { + _serializer.Clear(); + _serializer.WriteOperation(RagonOperation.JOIN_FAILED); + _serializer.WriteString($"Room with id {roomId} already exists"); + + var sendData = _serializer.ToArray(); + _gameThread.Server.Send(peerId, sendData, DeliveryType.Reliable); + return; + } + } var propertiesPayload = _serializer.ReadData(_serializer.Size); _buffer.Clear(); diff --git a/Ragon/Sources/Room/RoomManager.cs b/Ragon/Sources/Room/RoomManager.cs index 3a2a508..5bcc303 100644 --- a/Ragon/Sources/Room/RoomManager.cs +++ b/Ragon/Sources/Room/RoomManager.cs @@ -11,12 +11,12 @@ public class RoomManager private readonly IGameThread _gameThread; private readonly PluginFactory _factory; private readonly Logger _logger = LogManager.GetCurrentClassLogger(); - private readonly List _rooms = new List(); + private readonly List _rooms = new(); private readonly Dictionary _roomsBySocket; public IReadOnlyDictionary RoomsBySocket => _roomsBySocket; public IReadOnlyList Rooms => _rooms; - + public RoomManager(PluginFactory factory, IGameThread gameThread) { _gameThread = gameThread; @@ -83,7 +83,7 @@ public class RoomManager } } - _logger.Trace($"Player ({player.PlayerName}|{player.Id}) create room with Id {roomId} and params ({map}|{min}|{max})"); + _logger.Trace($"Room not found for Player ({player.PlayerName}|{player.Id}), create room with Id {roomId} and params ({map}|{min}|{max})"); var plugin = _factory.CreatePlugin(map); if (plugin == null)