private void SimulateAssetValueChanges() { var notificationSubscriptions = SubscriptionsManager.Subscriptions; var assets = _exchangeRatesProvider.GetAssets().GetAwaiter().GetResult().ToArray(); var rnd = new Random(); var changedAssetsAmount = rnd.Next(assets.Length); for (var i = 0; i < changedAssetsAmount; i++) { var randomAssetInd = rnd.Next(assets.Length); var randomAsset = assets[randomAssetInd]; var assetValue = _exchangeRatesProvider.GetAssetValue(randomAsset).GetAwaiter().GetResult(); var matchedConditions = notificationSubscriptions.Where(ns => ns.Predicate(assetValue) && ns.Asset.Equals(randomAsset, StringComparison.InvariantCultureIgnoreCase)) .ToArray(); foreach (var matchedCondition in matchedConditions) { AssetValueChangedEvent?.Invoke(this, new AssetValueChangedEventArgs { Asset = matchedCondition.Asset, ChatId = matchedCondition.ChatId, Value = assetValue }); } foreach (var cond in matchedConditions) { _subscriptionsManager.Unsubscribe(cond.Asset, cond.ChatId, cond.Predicate); } } }
private void SetupUsages() { _supportedAssets = (_ratesProvider.GetAssets()).GetAwaiter().GetResult(); _quoteUsageFormat = @"/quote <asset_name> <operator> <asset_value> then <action>. " + $"Supported assets {string.Join(',', _supportedAssets)}. " + $"Operators: >, >=, <, <=. " + $"Actions: signal"; }
public async Task <bool> Validate() { if (_request.ChatId == 0) { return(false); } var supportedAssets = await _exchangeRatesProvider.GetAssets(); if (supportedAssets.All(supportedAsset => !_request.Asset.StartsWith(supportedAsset))) { return(false); } _asset = _request.Asset.Split(_request.Operator).First(); return(true); }