/
Apalchev
/
SimpleLayer
Обзор
Документация
Войти
/
Apalchev
/
SimpleLayer
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Server/GameLobby.cs
52 строки
1 KB
milenium856
Fix some Bugs;
18 авг 2022, 16:00
18 авг 2022, 16:00
98b1ba2
Код
Авторство
О чём код?
using System.Collections.Concurrent; namespace Server; public class GameLobby { private readonly ConcurrentDictionary<Guid, List<Player>> _lobbyList; private readonly int _maxRetryCount; /* * ConcurrentDictionary<Guid, ConcurrentDictionary<Type, ConcurrentBag<Connection>>> * Type -> enum * Player = 1 * Observer = 2 */ public GameLobby(ConcurrentDictionary<Guid, List<Player>> lobbyList) { _lobbyList = lobbyList; _maxRetryCount = 5; } public void ConnectTo(Guid id, Player player) { _lobbyList[id].Add(player); } public void FindRandomOpponent(Player player) { var matches = _lobbyList.Where(c => c.Value.Count == 1).ToList(); if (_lobbyList.Any() && _lobbyList.Any(c => c.Value.Count == 1)) _lobbyList.TryAdd(new Guid(), new List<Player> {player}); else matches.First().Value.Add(player); } public void CreateMatch(Player player) { _lobbyList.TryAdd(new Guid(), new List<Player> {player}); } public void ClearEmptyLobby() { foreach (var variable in _lobbyList.Where(c => c.Value.Count == 0).ToList()) _lobbyList.TryRemove(variable); } public List<KeyValuePair<Guid, List<Player>>> GetAllMatches() { var matchList = _lobbyList.Where(c => c.Value.Count > 0).ToList(); return matchList; } }