private async Task OnServerDisposed(IDedicatedServer dedicatedServer)
        {
            _logger.LogDebug(
                "Server with {ModsetName} disposed on port {Port}, removing",
                dedicatedServer.Modset.Name,
                dedicatedServer.Port);

            TryRemoveServer(dedicatedServer);
        }
        private Result TryRemoveServer(IDedicatedServer dedicatedServer)
        {
            var server = GetServer(dedicatedServer.Port);

            if (server == dedicatedServer)
            {
                _ = _servers.TryRemove(dedicatedServer.Port, out _);
                _logger.LogDebug("Server removed on port {Port}", dedicatedServer.Port);
                return(Result.Success());
            }

            _logger.LogDebug("Server not removed on port {Port}. Other server is already running", dedicatedServer.Port);
            return(Result.Failure($"Other server is already running on port {dedicatedServer.Port}."));
        }
        public async Task <ServerStatus> GetServerStatus(IDedicatedServer dedicatedServer, CancellationToken cancellationToken)
        {
            var ipEndPoint = new IPEndPoint(IPAddress.Loopback, dedicatedServer.SteamQueryPort);
            var serverInfo = await A2SInfo.GetServerInfoAsync(ipEndPoint, cancellationToken, _logger);

            return(new ServerStatus(
                       GetServerStatusEnum(dedicatedServer, serverInfo),
                       serverInfo?.Name,
                       dedicatedServer?.Modset.Name,
                       serverInfo?.Map,
                       serverInfo?.Players,
                       serverInfo?.MaxPlayers,
                       dedicatedServer?.Port,
                       dedicatedServer?.StartTime,
                       dedicatedServer?.HeadlessClientsConnected));
        }