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)); }
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); } }