Example #1
0
        public async Task <SocialTipResponse> Tip(SocialQueuedItem socialQueuedItem)
        {
            SocialTipResponse response = null;

            try
            {
                response = await _client.Tip(socialQueuedItem.SocialTipRequest, _secret).ConfigureAwait(false);

                if (response.Status == TransactionStatus.Queued)
                {
                    socialQueuedItem.TransactionId = response.TransactionId;
                    Enqueue(socialQueuedItem);
                }
            }
            catch (ApiException aex)
            {
                try
                {
                    response = JsonConvert.DeserializeObject <SocialTipResponse>(aex.Content);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);

                    response = new SocialTipResponse
                    {
                        Message       = "Duplicate transaction",
                        Status        = TransactionStatus.Error,
                        TransactionId = -1
                    };
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);

                response = new SocialTipResponse
                {
                    Message       = ex.Message,
                    Status        = TransactionStatus.Error,
                    TransactionId = -1
                };
            }

            if (response.Status != TransactionStatus.Queued)
            {
                await socialQueuedItem.Reply(
                    new SocialTipStatusResponse { Message = response.Message, Status = response.Status })
                .ConfigureAwait(false);

                ;
            }

            return(response);
        }
Example #2
0
        private async void TimerQueueSendKinOnElapsed(object sender, ElapsedEventArgs e)
        {
            if (_queueItems.IsEmpty)
            {
                return;
            }

            SocialQueuedItem item = null;

            try
            {
                if (!_queueItems.TryDequeue(out item))
                {
                    return;
                }

                if (DateTime.Now < item.DelayTil)
                {
                    _queueItems.Enqueue(item);
                    return;
                }

                SocialTipStatusResponse response = await Tip(item.TransactionId).ConfigureAwait(false);

                if (response.Status != TransactionStatus.Queued && response.Status != TransactionStatus.Error &&
                    response.Status != TransactionStatus.MarketPlaceApiError)
                {
                    await item.Reply(response).ConfigureAwait(false);

                    ;
                }
                else
                {
                    Enqueue(item);
                }
            }
            catch (ApiException ea)
            {
                if (ea.StatusCode != HttpStatusCode.NotFound)
                {
                    if (item != null)
                    {
                        Enqueue(item);
                    }
                }
            }
        }
Example #3
0
 private void Enqueue(SocialQueuedItem item)
 {
     _queueItems.Enqueue(item);
     item.SetDelay();
 }