public Task <CommandResponseGameServer> Handle(CreateServerCommand request, CancellationToken cancellationToken)
        {
            _logger.LogDebug($"Running Handler CreateServerCommandHandler");
            var response   = new CommandResponseGameServer();
            var gameServer = request.gameServer;
            var game       = _repository.Single(DataItemPolicy <Game> .ById(gameServer.GameId));

            if (game == null)
            {
                response.status  = CommandResponseStatusEnum.Error;
                response.message = $"Unable to locate game with ID {gameServer.GameId}";
                _mediator.Publish(new ServerInstallStatusNotification("error", $"Unable to locate game with ID {gameServer.GameId}"));
                return(Task.FromResult(response));
            }

            var configFiles = _repository.List(GameDefaultConfigPolicy.ByGameId(game.Id));

            gameServer.GameConfigFiles = new List <GameServerConfigFile>();
            var variables = ConfigFileUtils.GetVariablesFromGameServer(gameServer);

            foreach (var configFile in configFiles)
            {
                gameServer.GameConfigFiles.Add(new GameServerConfigFile()
                {
                    Description           = configFile.Description,
                    FileContent           = configFile.Template,
                    FilePath              = configFile.FilePath,
                    GameServer            = gameServer,
                    GameDefaultConfigFile = configFile
                });
            }


            gameServer.GamePort               = _portProvider.GetNextAvailablePort(game.GamePort, gameServer.IpAddress, game.PortIncrement);
            gameServer.QueryPort              = _portProvider.GetNextAvailablePort(game.QueryPort, gameServer.IpAddress, game.PortIncrement);
            gameServer.HomeDirectory          = Path.Combine(_dirProvider.GetBaseInstallDirectory(), gameServer.Guid.ToString());
            gameServer.GameServerCurrentStats = new GameServerCurrentStats();

            gameServer.GameServerCurrentStats.Status = ServerStatusStates.Installing;
            try
            {
                _repository.Create(gameServer);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                response.status  = CommandResponseStatusEnum.Success;
                response.message = e.ToString();
                _mediator.Publish(new ServerInstallStatusNotification("error", e.ToString()));
                return(Task.FromResult(response));
            }

            try
            {
                _serverManager.InstallGameServer(gameServer);
                _mediator.Publish(new ServerInstallStatusNotification("installing", $"Game server install started for server {gameServer.Guid}"));
                response.status  = CommandResponseStatusEnum.Success;
                response.message = "Game server now installing";
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                response.status  = CommandResponseStatusEnum.Error;
                response.message = e.ToString();
                _mediator.Publish(new ServerInstallStatusNotification("error", e.ToString()));
            }



            return(Task.FromResult(response));
        }