/// <summary> /// Coroutine that concurrently attempts to send events to Keen. /// It cached event data on failure. /// </summary> private IEnumerator ProcessEventData(EventData event_data, Action <CallbackData> callback) { if (!m_Validated) { yield break; } using (WWW task_www = event_data.AsWWW(Settings)) { m_PendingTasks.Add(event_data); yield return(task_www); m_PendingTasks.Remove(event_data); EventStatus event_status = EventStatus.Failed; if (!string.IsNullOrEmpty(task_www.error)) { Debug.LogErrorFormat("[Keen] error: {0}", task_www.error); if (CacheEventData(event_data)) { Debug.LogFormat("[Keen] event cached: {0}", event_data.Name); event_status = EventStatus.Cached; } else { Debug.LogFormat("[Keen] event failed: {0}", event_data.Name); event_status = EventStatus.Failed; } } else { Debug.LogFormat("[Keen] event submitted: {0}", event_data.Name); event_status = EventStatus.Submitted; if (Settings.CacheInstance != null && Settings.CacheInstance.Ready()) { if (Settings.CacheInstance.Exists(event_data)) { Settings.CacheInstance.Remove(event_data); } } } if (callback != null) { callback.Invoke(new CallbackData { evdata = event_data, status = event_status }); } } }