using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using NLog; using Ragon.Core.Game; namespace Ragon.Core.Lobby; public class LobbyInMemory : ILobby { private readonly List _rooms = new(); private readonly Logger _logger = LogManager.GetCurrentClassLogger(); public bool FindRoomById(string roomId, [MaybeNullWhen(false)] out Room room) { foreach (var existRoom in _rooms) { var info = existRoom.Info; if (existRoom.Id == roomId && info.Min < info.Max) { room = existRoom; return true; } } room = default; return false; } public bool FindRoomByMap(string map, [MaybeNullWhen(false)] out Room room) { foreach (var existRoom in _rooms) { var info = existRoom.Info; if (info.Map == map && existRoom.Players.Count < info.Max) { room = existRoom; return true; } } room = default; return false; } public void Persist(Room room) { _rooms.Add(room); foreach (var r in _rooms) _logger.Trace($"{r.Id} {r.Info}"); } public void Remove(Room room) { _rooms.Remove(room); } }