Ejemplo n.º 1
0
        private void RaiseSendingSignalEvent(string ticker, double value)
        {
            var handler = SendingSignalEvent;
            var args    = new SendingSignalEventArgs {
                Ticker = ticker, Value = value
            };

            handler?.Invoke(this, args);
        }
Ejemplo n.º 2
0
        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);
            }
        }