Пример #1
0
        private Result CopyNewKeys(IModset modset)
        {
            var clientLoadableMods = modset.ClientLoadableMods;

            if (clientLoadableMods.IsEmpty())
            {
                _logger.LogInformation("No client loadable mods found in modset {ModsetName}", modset.Name);
            }

            var modBikeysList = new List <ModBikeys>();

            foreach (var mod in clientLoadableMods)
            {
                CopyKeysForMod(mod)
                .Tap(modBikeys => modBikeysList.Add(modBikeys))
                .OnFailure(error => LogKeysCopyError(mod, error))
                .OnFailure(_ => modBikeysList.Add(new ModBikeys(mod)));
            }

            _logger.LogInformation(
                "Copied {Count} keys for modset {ModsetName}",
                modBikeysList.Sum(x => x.BikeyFiles.Count),
                modset.Name);

            LogKeysNotFound(modBikeysList);

            return(Result.Success());
        }
        public DedicatedServerTests()
        {
            _modset = ModsetHelpers.CreateTestModset(_fixture);

            _modsetConfigMock
            .Setup(x => x.CopyConfigFiles())
            .Returns(Result.Success);
        }
        private IDedicatedServer CreateServer(int port, IModset modset, int numberOfHeadlessClients)
        {
            var server = _dedicatedServerFactory.CreateDedicatedServer(port, modset, numberOfHeadlessClients);

            server.OnServerShutdown += OnServerDisposed;

            return(server);
        }
Пример #4
0
 public HeadlessParametersProvider(
     int port,
     IModset modset,
     IModsetConfig modsetConfig)
 {
     _port         = port;
     _modset       = modset;
     _modsetConfig = modsetConfig;
 }
Пример #5
0
 public ServerParametersProvider(
     int port,
     IModset modset,
     IModsetConfig modsetConfig)
 {
     _port         = port;
     _modset       = modset;
     _modsetConfig = modsetConfig;
 }
        // TODO: Add port

        public async Task <Result> StartServer(IModset modset, CancellationToken cancellationToken)
        {
            return(await ShutdownServer(
                       Port,
                       false,
                       cancellationToken)
                   //.Bind(() => _modsUpdateService.UpdateModset(modset, cancellationToken))
                   .Bind(() => _serverProvider.GetServer(Port, modset).Start()));
        }
        public IDedicatedServer CreateDedicatedServer(
            int port,
            IModset modset,
            int numberOfHeadlessClients)
        {
            var builder = _serverBuilderFactory.CreateServerBuilder();

            return(builder
                   .OnPort(port)
                   .WithModset(modset)
                   .WithHeadlessClients(numberOfHeadlessClients)
                   .Build());
        }
Пример #8
0
        public IArmaProcess CreateServerProcess(
            int port,
            IModset modset,
            IModsetConfig modsetConfig)
        {
            var parametersProvider = new ServerParametersProvider(
                port,
                modset,
                modsetConfig);

            return(new ArmaProcess(
                       parametersProvider.GetStartupParams(_settings.ServerExecutable !),
                       _serverProcessLogger));
        }
        private IDedicatedServer CreateServer(
            int port,
            IModset modset,
            IArmaProcess armaProcess,
            IEnumerable <IArmaProcess>?headlessClients = null)
        {
            var server = _dedicatedServerFactory.CreateDedicatedServer(
                port,
                modset,
                armaProcess,
                headlessClients);

            return(server);
        }
        public IDedicatedServer CreateDedicatedServer(
            int port,
            IModset modset,
            IArmaProcess armaProcess,
            IEnumerable <IArmaProcess>?headlessProcesses = null)
        {
            var builder = _serverBuilderFactory.CreateServerBuilder();

            return(builder
                   .OnPort(port)
                   .WithModset(modset)
                   .WithServerProcess(armaProcess)
                   .WithHeadlessClients(headlessProcesses)
                   .Build());
        }
Пример #11
0
        public IDedicatedServer GetServer(int port, IModset modset)
        {
            var server = _servers.GetOrAdd(
                port,
                serverPort => CreateServer(
                    serverPort,
                    modset,
                    1));

            return(server.Modset.Equals(modset)
                ? server
                   // TODO: Think of better exception type here
                : throw new ServerMismatchException(
                       $"Expected to get server with {modset.Name} modset with {modset.Mods.Count} mods on port {port} but found {server.Modset.Name} with {server.Modset.Mods.Count} mods."));
        }
Пример #12
0
        public IEnumerable <IArmaProcess> CreateHeadlessClients(
            int port,
            IModset modset,
            IModsetConfig modsetConfig,
            int numberOfHeadlessClients = 1)
        {
            var parametersProvider = new HeadlessParametersProvider(
                port,
                modset,
                modsetConfig);

            for (var i = 0; i < numberOfHeadlessClients; i++)
            {
                yield return(new ArmaProcess(
                                 parametersProvider.GetStartupParams(_settings.ServerExecutable !),
                                 _serverProcessLogger));
            }
        }
Пример #13
0
        public DedicatedServer(
            int port,
            IModset modset,
            IModsetConfig modsetConfig,
            IServerStatusFactory serverStatusFactory,
            IKeysPreparer keysPreparer,
            IArmaProcessManager armaProcessManager,
            IArmaProcess armaProcess,
            IEnumerable <IArmaProcess> headlessClients,
            ILogger <DedicatedServer> logger)
        {
            Port                 = port;
            SteamQueryPort       = port + 1;
            _keysPreparer        = keysPreparer;
            _armaProcessManager  = armaProcessManager;
            Modset               = modset;
            _modsetConfig        = modsetConfig;
            _serverStatusFactory = serverStatusFactory;
            _armaProcess         = InitializeArmaProcess(armaProcess);

            _headlessProcesses = headlessClients.ToList();
            _logger            = logger;
        }
Пример #14
0
 public Result PrepareKeysForModset(IModset modset)
 => RemoveOldKeys()
 .Bind(() => CopyNewKeys(modset))
 .Bind(CopyArmaKey);
 public TestDedicatedServer(IModset modset)
 {
     Modset = modset;
 }
Пример #16
0
 /// <inheritdoc />
 public async Task <Result> PrepareModset(IModset modset, CancellationToken cancellationToken)
 => await CheckUpdatesAndDownloadMods(modset.ActiveMods, cancellationToken)
 .Tap(() => _logger.LogInformation("Preparation of {ModsetName} modset finished", modset.Name));
Пример #17
0
 public IServerBuilder WithModset(IModset modset)
 {
     _modset = modset;
     return(this);
 }
 public async Task <Result> UpdateModset(IModset modset, CancellationToken cancellationToken)
 {
     return(await _modsManager.PrepareModset(modset, cancellationToken));
 }