Exemplo n.º 1
0
        private static void DispatchOperations()
        {
            ThreadOperation operation = _ops.Dequeue();

            if (operation == null)
            {
                return;
            }
            Mixpanel.Log($"Dispatching new operation: {operation.GetAction()}");
            Value data = operation.GetWhat();

            switch (operation.GetAction())
            {
            case ThreadOperation.ThreadOperationAction.ENQUEUE_EVENTS:
                MixpanelStorage.TrackPersistentQueue.Enqueue(data);
                break;

            case ThreadOperation.ThreadOperationAction.ENQUEUE_PEOPLE:
                MixpanelStorage.EngagePersistentQueue.Enqueue(data);
                break;

            case ThreadOperation.ThreadOperationAction.FLUSH:
                if (_isBgThreadRunning)
                {
                    IEnumerator trackEnum  = SendData(MixpanelStorage.TrackPersistentQueue, Config.TrackUrl);
                    IEnumerator engageEnum = SendData(MixpanelStorage.EngagePersistentQueue, Config.EngageUrl);
                    while (trackEnum.MoveNext())
                    {
                    }
                    ;
                    while (engageEnum.MoveNext())
                    {
                    }
                    ;
                }
                else
                {
                    Controller.GetInstance().StartCoroutine(SendData(MixpanelStorage.TrackPersistentQueue, Config.TrackUrl));
                    Controller.GetInstance().StartCoroutine(SendData(MixpanelStorage.EngagePersistentQueue, Config.EngageUrl));
                }

                break;

            case ThreadOperation.ThreadOperationAction.CLEAR_QUEUE:
                MixpanelStorage.TrackPersistentQueue.Clear();
                MixpanelStorage.EngagePersistentQueue.Clear();
                break;

            case ThreadOperation.ThreadOperationAction.KILL_THREAD:
                _isBgThreadRunning = false;
                _bgThread.Abort();     // Will throw an exception
                break;

            default:
                break;
            }
        }