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}"
                });
            }
        }
Beispiel #5
0
 public static ServerType GetServerTypeForConfiguration(AbstractServerConfiguration configuration)
 {
     return(GetServerTypeForConfiguration(configuration.GetType()));
 }
 public ServerBuilder GetServerBuilder(AbstractServerConfiguration configuration)
 {
     return(new ServerBuilder(configuration, new ServerValidator(_dbService)));
 }