コード例 #1
0
        public async Task <Result <IArmaProcess> > CheckServerIsRestarting(IArmaProcess armaProcess)
        {
            var armaProcesses = await _armaProcessDiscoverer.DiscoverArmaProcesses();

            var newArmaProcess = armaProcesses
                                 .SingleOrDefault(x => x.Value.Exists(process => Equals(process.Parameters, armaProcess.Parameters)))
                                 .Value?
                                 .SingleOrDefault(process => process.ProcessType == ArmaProcessType.Server);

            return(newArmaProcess is null
                ? Result.Failure <IArmaProcess>("Server process did not restart.")
                : Result.Success(newArmaProcess));
        }
コード例 #2
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);
            }
        }