protected async override void OnDisposing() { if (disposed) { return; } await DisconnectSocketAsync(false).ConfigureAwait(true); symbolsSubscription.Dispose(); accountSubscription.Dispose(); parametersSubscription.Dispose(); AccountViewModel.Dispose(); SymbolsViewModel.Dispose(); StrategyParametersViewModel.Dispose(); serverMonitorCacheSubscription.Dispose(); if (StrategyDisplayViewModel != null) { strategySubscription.Dispose(); StrategyDisplayViewModel.Dispose(); } strategyAssemblyManager.Dispose(); commandVisibilitySemaphoreSlim.Dispose(); disposed = true; }
protected async override void OnDisposing() { if (disposed) { return; } await DisconnectSocketAsync(false); symbolsSubscription.Dispose(); accountSubscription.Dispose(); ordersSubscription.Dispose(); parametersSubscription.Dispose(); AccountViewModel.Dispose(); SymbolsViewModel.Dispose(); OrdersViewModel.Dispose(); StrategyParametersViewModel.Dispose(); strategyAssemblyManager.Dispose(); serverMonitorCacheSubscription.Dispose(); if (StrategyDisplayViewModel != null) { strategySubscription.Dispose(); StrategyDisplayViewModel.Dispose(); } disposed = true; }
protected async override void OnPublished(object data) { IsBusy = true; try { Strategy = await strategyService.GetStrategy(Title).ConfigureAwait(true); strategyAssemblyManager.Activate(Strategy, ViewModelContext.UiDispatcher, Logger); StrategyDisplayViewModel = (StrategyDisplayViewModelBase)strategyAssemblyManager.StrategyDisplayViewModel; ObserveStrategy(); RaiseStrategyDisplayEvent(); AccountViewModel.Dispatcher = ViewModelContext.UiDispatcher; SymbolsViewModel.Dispatcher = ViewModelContext.UiDispatcher; StrategyParametersViewModel.Dispatcher = ViewModelContext.UiDispatcher; StrategyParametersViewModel.Strategy = Strategy; var account = new Account(new CoreModel.AccountInfo { User = new CoreModel.User() }); if (Strategy.StrategySubscriptions.Any()) { var strategySubscription = Strategy.StrategySubscriptions.First(); account.AccountName = strategySubscription.AccountName; account.ApiKey = strategySubscription.ApiKey; account.ApiSecret = strategySubscription.SecretKey; account.ApiPassPhrase = strategySubscription.ApiPassPhrase; account.Exchange = strategySubscription.Exchange; } GetServerMonitors(); await Task.WhenAll(SymbolsViewModel.GetStrategySymbols(Strategy), AccountViewModel.Login(account)).ConfigureAwait(false); } catch (Exception ex) { Logger.Log($"OnPublished {ex.Message}", Prism.Logging.Category.Exception, Prism.Logging.Priority.High); ShowMessage(new Message { MessageType = MessageType.Error, Text = $"Strategy load error. Check configuration. {ex.Message}" }); } finally { IsBusy = false; } }
public StrategyRunnerViewModel( ViewModelContext viewModelContext, AccountViewModel accountViewModel, SymbolsViewModel symbolsViewModel, OrdersViewModel ordersViewModel, StrategyParametersViewModel strategyParametersViewModel, IStrategyService strategyService, IServerMonitorCache serverMonitorCache, IStrategyAssemblyManager strategyAssemblyManager) : base(viewModelContext) { this.strategyService = strategyService; this.serverMonitorCache = serverMonitorCache; this.strategyAssemblyManager = strategyAssemblyManager; AccountViewModel = accountViewModel; SymbolsViewModel = symbolsViewModel; OrdersViewModel = ordersViewModel; StrategyParametersViewModel = strategyParametersViewModel; CanRun = false; CanMonitor = false; IsConnected = false; IsConnecting = false; Notifications = new ObservableCollection <Message>(); RunCommand = new ViewModelCommand(RunStrategy); MonitorCommand = new ViewModelCommand(MonitorStrategy); DisconnectCommand = new ViewModelCommand(Disconnect); StopCommand = new ViewModelCommand(StopStrategy); ClearNotificationsCommand = new ViewModelCommand(ClearNotifications); ObserveOrders(); ObserveSymbols(); ObserveAccount(); ObserveParameters(); ObserveServerMonitorCache(); }