private async Task SetCommandVisibility(StrategyRunnerCommandVisibility strategyRunnerCommandVisibility) { await commandVisibilitySemaphoreSlim.WaitAsync().ConfigureAwait(false); try { if (strategyRunnerCommandVisibility.Equals(StrategyRunnerCommandVisibility.ServerAvailable) && ((!IsConnected && !IsConnecting) || (!IsConnected && SelectedServer.IsConnected))) { CanRun = false; CanMonitor = false; IsConnecting = true; var isRunning = await IsStrategyRunningAsync().ConfigureAwait(false); CanRun = !isRunning; CanMonitor = isRunning; IsConnecting = false; } else if (strategyRunnerCommandVisibility.Equals(StrategyRunnerCommandVisibility.Connected) || strategyRunnerCommandVisibility.Equals(StrategyRunnerCommandVisibility.Connecting)) { CanRun = false; CanMonitor = false; IsConnecting = strategyRunnerCommandVisibility.Equals(StrategyRunnerCommandVisibility.Connecting); IsConnected = strategyRunnerCommandVisibility.Equals(StrategyRunnerCommandVisibility.Connected); } else if (strategyRunnerCommandVisibility.Equals(StrategyRunnerCommandVisibility.ServerUnavailable)) { CanRun = false; CanMonitor = false; IsConnecting = false; IsConnected = false; } } catch (Exception ex) { Logger.Log($"SetCommandVisibility {ex}", Prism.Logging.Category.Exception, Prism.Logging.Priority.High); NotificationsAdd(new Message { MessageType = MessageType.Error, Text = $"SetCommandVisibility - {ex.Message}", TextVerbose = ex.ToString() }); await SetCommandVisibility(StrategyRunnerCommandVisibility.ServerUnavailable).ConfigureAwait(false); } finally { commandVisibilitySemaphoreSlim.Release(); } }
private async Task SetCommandVisibility(StrategyRunnerCommandVisibility strategyRunnerCommandVisibility) { try { if (strategyRunnerCommandVisibility.Equals(StrategyRunnerCommandVisibility.CanConnect)) { IsConnecting = true; if (IsValidSelectServer()) { var isRunning = await IsStrategyRunningAsync(); CanRun = !isRunning; CanMonitor = isRunning; } else { CanRun = false; CanMonitor = false; } } else { CanRun = false; CanMonitor = false; } IsConnecting = strategyRunnerCommandVisibility.Equals(StrategyRunnerCommandVisibility.Connecting); IsConnected = strategyRunnerCommandVisibility.Equals(StrategyRunnerCommandVisibility.Connected); return; } catch (Exception ex) { Logger.Log($"SetCommandVisibility {ex}", Prism.Logging.Category.Exception, Prism.Logging.Priority.High); NotificationsAdd(new Message { MessageType = MessageType.Error, Text = $"SetCommandVisibility - {ex.Message}", TextVerbose = ex.ToString() }); } await SetCommandVisibility(StrategyRunnerCommandVisibility.Disconnect); }