private void RaiseSendingSignalEvent(string ticker, double value) { var handler = SendingSignalEvent; var args = new SendingSignalEventArgs { Ticker = ticker, Value = value }; handler?.Invoke(this, args); }
private async void OnSendingSignalAsync(object sender, SendingSignalEventArgs args) { try { if (_nextSignalTime > DateTime.UtcNow) { return; } using var scope = _scopeFactory.CreateScope(); using var context = scope.ServiceProvider.GetService <ApplicationDbContext>(); var chats = await context.Chats.ToListAsync(); chats = FilterForMode(chats); foreach (var chat in chats) { try { _nextSignalTime = DateTime.UtcNow.AddSeconds(GlobalSignalIntervalSeconds); await _telegramClient.SendTextMessageAsync(chat.Id, $"{args.Ticker} near the level {args.Value}"); } catch (ApiRequestException ex) { if (ex.ErrorCode == 403) { var record = await context.Chats.FirstOrDefaultAsync(x => x.Id == chat.Id); if (record != null) { context.Remove(record); } await context.SaveChangesAsync(); } } } _tinkoffClient.NextSignalTime[args.Ticker] = DateTime.UtcNow.AddSeconds(SignalIntervalSeconds); } catch (Exception ex) { _logger.LogError(ex, "An error occured while sending signal for ticker {Ticker}", args.Ticker); } }