public void AttemptDelivery()
{
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.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)
{
try {
Amazon.MobileAnalytics.Model.Event _analyticsEvent = JsonMapper.ToObject<Amazon.MobileAnalytics.Model.Event>(eventString);
submitEventsList.Add(_analyticsEvent);
} catch (JsonException e) {
_logger.Error(e, "Could not load event from event store, discarding.");
}
submitEventsIdList.Add(eventData["id"].ToString());
}
else
{
SubmitEvents(submitEventsIdList, submitEventsList);
submitEventsIdList = new List<string>();
submitEventsList = new List<Amazon.MobileAnalytics.Model.Event>();
submitEventsLength = 0L;
}
}
if (submitEventsLength > 0)
SubmitEvents(submitEventsIdList, submitEventsList);
}