private async Task ValidateNewServerConfiguration(AbstractServerConfiguration configuration) { var existingServers = await GetServerListAsync(); if (existingServers.Any(s => s.HostPorts.Contains(configuration.HostPort))) { throw new Exception($"Server with port {configuration.HostPort} already exists."); } if (existingServers.Any(s => s.Name == configuration.ServerName)) { throw new Exception($"Server with name {configuration.ServerName} already exists."); } }
public ServerBuilder(AbstractServerConfiguration configuration, IServerValidator validator) { if (!configuration.IsValid()) { throw new Exception("Cannot create a server from an invalid configuration."); } Configuration = configuration; Server = new Server { Name = configuration.ServerName }; Validator = validator; Server.SetConfiguration(Configuration); }
public async Task <Server> CreateServerFromConfigurationAsync(AbstractServerConfiguration configuration) { await ValidateNewServerConfiguration(configuration); if (configuration is MinecraftConfiguration minecraftConfiguration) { var wrappedServer = await MinecraftServer.CreateAsync(minecraftConfiguration, this); return(wrappedServer.ServerEntity); } if (configuration is TerrariaConfiguration terrariaConfiguration) { var wrappedServer = await TerrariaServer.CreateAsync(terrariaConfiguration, this); return(wrappedServer.ServerEntity); } throw new Exception($"Unrecognised server configuration: {configuration.GetType().Name}"); }
public async Task <ServerDetailsResponse> CreateServerAsync([FromBody] CreateServerRequest request) { try { AbstractServerConfiguration configuration = null; if (request.ConfigurationType == typeof(MinecraftConfiguration)) { configuration = JsonHelper.Deserialise <MinecraftConfiguration>(request.JsonConfiguration); } else if (request.ConfigurationType == typeof(TerrariaConfiguration)) { configuration = JsonHelper.Deserialise <TerrariaConfiguration>(request.JsonConfiguration); } if (configuration != null) { var server = await _servers.CreateServerFromConfigurationAsync(configuration); return(new ServerDetailsResponse { Success = true, Server = new ServerExtendedDetails(server, await CreateContainerDetailsForServer(server)) }); } throw new Exception($"Unsupported configuration: {request.ConfigurationTypeName}"); } catch (Exception exception) { _logger.LogError($"Failed to create new server: {exception.Message}"); return(new ServerDetailsResponse { Success = false, Error = $"Failed to create new server: {exception.Message}" }); } }
public static ServerType GetServerTypeForConfiguration(AbstractServerConfiguration configuration) { return(GetServerTypeForConfiguration(configuration.GetType())); }
public ServerBuilder GetServerBuilder(AbstractServerConfiguration configuration) { return(new ServerBuilder(configuration, new ServerValidator(_dbService))); }