Example #1
0
        /// <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
                    });
                }
            }
        }