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)); }