feat(wip): room list support

This commit is contained in:
2024-04-13 16:17:31 +03:00
parent acedaef270
commit d82964526c
16 changed files with 215 additions and 54 deletions
@@ -21,6 +21,7 @@ namespace Ragon.Server.Lobby;
public interface IRagonLobby
{
public IReadOnlyList<IRagonRoom> Rooms { get; }
public bool FindRoomById(string roomId, [MaybeNullWhen(false)] out RagonRoom room);
public bool FindRoomByScene(string sceneName, [MaybeNullWhen(false)] out RagonRoom room);
public void Persist(RagonRoom room);
@@ -0,0 +1,33 @@
using Ragon.Protocol;
using Ragon.Server.Room;
namespace Ragon.Server.Lobby;
public class RagonLobbyDispatcher
{
private IRagonLobby _lobby;
public RagonLobbyDispatcher(IRagonLobby lobby)
{
_lobby = lobby;
}
public void Write(RagonBuffer writer)
{
writer.Clear();
writer.Write((byte)RagonOperation.ROOM_LIST_UPDATED);
var rooms = _lobby.Rooms;
writer.WriteUShort((ushort)rooms.Count);
for (int i = 0; i < rooms.Count; i++)
{
var room = rooms[i];
writer.WriteString(room.Id);
writer.WriteString(room.Scene);
writer.WriteUShort((ushort)room.PlayerMax);
writer.WriteUShort((ushort)room.PlayerMin);
writer.WriteUShort((ushort)room.PlayerCount);
}
}
}
@@ -25,6 +25,8 @@ public class LobbyInMemory : IRagonLobby
private readonly List<RagonRoom> _rooms = new();
private readonly Logger _logger = LogManager.GetCurrentClassLogger();
public IReadOnlyList<IRagonRoom> Rooms => _rooms.AsReadOnly();
public bool FindRoomById(string roomId, [MaybeNullWhen(false)] out RagonRoom room)
{
foreach (var existRagonRoom in _rooms)