public async Task AttemptDeliveryAsync()

in src/Delivery/DeliveryClient.cs [252:315]


        public async Task AttemptDeliveryAsync()
        {
            lock (_deliveryLock)
            {
                if (_deliveryInProgress)
                {
                    _logger.InfoFormat("Delivery already in progress, failing new delivery");
                    return;
                }
                _deliveryInProgress = true;
            }

            //validate all the policies before attempting the delivery
            foreach (IDeliveryPolicy policy in _deliveryPolicies)
            {
                if (!policy.IsAllowed())
                {
                    _logger.InfoFormat("Policy restriction: {0}", policy.GetType().Name);
                    lock (_deliveryLock)
                    {
                        _deliveryInProgress = false;
                    }
                    return;
                }
            }

            List<JsonData> allEventList = _eventStore.GetEvents(_appID, MAX_ALLOWED_SELECTS);
            if (allEventList == null || allEventList.Count == 0)
            {
                _logger.InfoFormat("No Events to deliver.");
                lock (_deliveryLock)
                {
                    _deliveryInProgress = false;
                }
                return;
            }

            List<string> submitEventsIdList = new List<string>();
            List<Amazon.MobileAnalytics.Model.Event> submitEventsList = new List<Amazon.MobileAnalytics.Model.Event>();
            long submitEventsLength = 0L;

            foreach (JsonData eventData in allEventList)
            {
                string eventString = (string)eventData["event"];
                submitEventsLength += eventString.Length;
                if (submitEventsLength < _maConfig.MaxRequestSize)
                {
                    Amazon.MobileAnalytics.Model.Event _analyticsEvent = JsonMapper.ToObject<Amazon.MobileAnalytics.Model.Event>(eventString);

                    submitEventsIdList.Add(eventData["id"].ToString());
                    submitEventsList.Add(_analyticsEvent);
                }
                else
                {
                    await SubmitEvents(submitEventsIdList, submitEventsList).ConfigureAwait(false);
                    submitEventsIdList = new List<string>();
                    submitEventsList = new List<Amazon.MobileAnalytics.Model.Event>();
                    submitEventsLength = 0L;
                }
            }

            if (submitEventsLength > 0)
                await SubmitEvents(submitEventsIdList, submitEventsList).ConfigureAwait(false);
        }