Пример #1
0
        public async Task HandleAsync(HttpContext context)
        {
            var requestConfig = await Serializer.DeserializeStreamAsync <AppConfig>(context.Request.Body)
                                .ConfigureAwait(false);

            // due to API limits, we may want to temporarily disable api requests
            if (requestConfig.PushBullet?.SkipSend is bool smsSend)
            {
                SmsSender.SkipSend = smsSend;
            }

            var skipYouTubeSend = requestConfig.YouTube?.SkipSend ?? Config.Value.YouTube?.SkipSend
                                  ?? throw new NullReferenceException(nameof(AppConfig.YouTube));

            var pageCount = requestConfig.YouTube?.PageCount ?? Config.Value.YouTube?.PageCount
                            ?? throw new NullReferenceException(nameof(AppConfig.YouTube));
            var numbers = requestConfig.Numbers ?? Config.Value.Numbers
                          ?? throw new NullReferenceException(nameof(AppConfig.Numbers));
            var siteUri = requestConfig.SiteUri ?? Config.Value.SiteUri
                          ?? throw new NullReferenceException(nameof(AppConfig.SiteUri));

            var random = new Random(Guid.NewGuid().GetHashCode());

            var videos = await GetVideoUrls(pageCount, skipYouTubeSend).ToArrayAsync().ConfigureAwait(false);

            var video = videos.RandomItem();

            var message  = $"{_greetings.RandomItem()}, {_names.RandomItem()}! Checkout this cool knife sharpening video!\n\n{video}";
            var message2 = $"If you're tired of these messages, you can unsubscribe using this link: {siteUri}";

            // send each message as a separate sms, rather than a single mms
            foreach (var number in numbers)
            {
                var result = await SmsSender.SendAsync(message, number).ConfigureAwait(false);

                await SmsSender.AwaitCompleteAsync(result).ConfigureAwait(false);

                // need a delay between SMS message or the second may not go through
                await Task.Delay(1000);

                await SmsSender.SendAsync(message2, number).ConfigureAwait(false);

                await Task.Delay(1000);
            }
        }