Ejemplo n.º 1
0
        private async Task DiscoverProcesses()
        {
            var armaProcesses = await _armaProcessDiscoverer.DiscoverArmaProcesses();

            foreach (var serverKeyValuePair in armaProcesses)
            {
                var(port, processes) = serverKeyValuePair;
                var server          = processes.SingleOrDefault(x => x.ProcessType == ArmaProcessType.Server);
                var headlessClients = processes.Where(x => x.ProcessType == ArmaProcessType.HeadlessClient);

                if (server is null)
                {
                    _logger.LogDebug("Server not found on port {Port}. Shutting down headless clients for server on this port", port);

                    foreach (var headlessClient in headlessClients)
                    {
                        headlessClient.Shutdown();
                    }

                    _logger.LogDebug("Headless clients for server on port {Port} were shut down", port);

                    continue;
                }

                var dedicatedServer = CreateServer(
                    port,
                    // TODO: Handle the result of GetModsetByName
                    (await _modsetProvider.GetModsetByName(server.Parameters.ModsetName)).Value,
                    server,
                    headlessClients);

                dedicatedServer.OnServerShutdown += OnServerDisposed;

                _servers.GetOrAdd(port, dedicatedServer);
            }
        }
        // TODO: Add port

        public async Task <Result> StartServer(string modsetName, CancellationToken cancellationToken)
        {
            return(await _modsetProvider.GetModsetByName(modsetName)
                   .Bind(modset => StartServer(modset, cancellationToken)));
        }
 public async Task <Result> UpdateModset(string modsetName, CancellationToken cancellationToken)
 {
     return(await _modsetProvider.GetModsetByName(modsetName)
            .Bind(x => UpdateModset(x, cancellationToken)));
 }