public LobbyChatService(ILogger logger)
 {
     this.logger        = logger;
     this.lobbies       = new ConcurrentDictionary <int, LobbyChatRoom>();
     this.ServiceStatus = ServiceStatusEnum.Active;
     this.mainLobby     = GetOrAddLobby(1, "Main Lobby", OpCodes.LOBBY_TYPE_MAIN, out var _);
 }
        public async Task AnnounceRoomDeparture(LobbyChatRoom lobbyChatRoom, uint clientIndex)
        {
            logger.Information("Client #{@clientIndex} is leaving their lobby", clientIndex);
            await lobbyChatRoom.ClientLeavingRoomAsync((int)clientIndex);

            logger.Information($"Lobby '{lobbyChatRoom.Name}' now has {lobbyChatRoom.Clients.Count:N0} Users");
            await Task.Yield();
        }
 public bool TryGetLobby(ushort lobbyId, out LobbyChatRoom lobbyChatRoom)
 {
     this.logger.Information("Looking for a Lobby of ID {@lobbyId}", lobbyId);
     lobbyChatRoom = null;
     if (lobbies.ContainsKey(lobbyId))
     {
         lobbyChatRoom = lobbies[lobbyId];
         this.logger.Information("Found Lobby ID {@lobbyId}", lobbyId);
         return(true);
     }
     this.logger.Information("Could not find {@lobbyId}", lobbyId);
     return(false);
 }
 public bool TryFindLobby(uint clientIndex, out LobbyChatRoom lobbyChatRoom)
 {
     lobbyChatRoom = null;
     foreach (var lobby in Lobbies)
     {
         var lobbyId = lobby.Key;
         var lcr     = lobby.Value;
         if (lcr.Clients.Any(c => c.ClientIndex == clientIndex))
         {
             lobbyChatRoom = lcr;
             return(true);
         }
     }
     return(false);
 }
 public void Initialize()
 {
     this.mainLobby = GetOrAddLobby(1, "Main Lobby", OpCodes.LOBBY_TYPE_MAIN, out var _);
 }
 public bool TryFindLobby(GameClientAsync gameClientAsync, out LobbyChatRoom lobbyChatRoom)
 {
     return(TryFindLobby((uint)gameClientAsync.ClientIndex, out lobbyChatRoom));
 }