Esempio n. 1
0
        public AppController(DbService db)
        {
            this.db = db;
            resultQueue = new ResultsQueue(this, db);
            resultQueue.NewResult += ResultsQueueOnNewResult;

            logController = new LogController();
            options = new Options();

            // Tracing
            Trace.Listeners.Add(logController);
            traceSwitch.Level = TraceLevel.Info;
            DbService.dbTraceSwitch.Level = TraceLevel.Info;

            if ( options.ReopenLastFile )
            {
                var lastFile = options.LastFile;
                if ( !string.IsNullOrEmpty( lastFile ) && File.Exists( lastFile ) )
                {
                    OpenRace( lastFile );
                }
            }

            clockTime.ClockRunningHandler += (s, b) => clockRunning = b;

            // Initial check of results
            if ( db.IsDbOpen )
            {
                db.CheckResults();
            }
        }
Esempio n. 2
0
    public void ProcessRequests()
    {
        if (Processing)
        {
            return;
        }

        // Start processing result queue
        Processing = true;
        // handle pending requests on the controller monitoring for result updates
        RequestsCompleted.Clear();

        foreach (KeyValuePair <string, Result> entry in ResultsQueue)
        {
            if (entry.Value.Type == Result.Types.CRYPTOITEMS && CIController != null)
            {
                switch (entry.Value.Status)
                {
                case Status.SUCCESS:
                    if (entry.Value.compoundQueries.Count > 0)
                    {
                        foreach (CompoundQuery query in entry.Value.compoundQueries)
                        {
                            Request request = CIController.ProcessCryptoItem(query.Task, query.CryptoItem, query.Properties);

                            if (EnjinEditor.IsRequestSuccessfull(request.state))
                            {
                                EditorUtility.DisplayDialog("SUCCESS", "Your previous request contained an additional request which has now posted with a status of " + request.state + ". Please see your wallet to complete the transaction!", "Ok");
                            }
                            else
                            {
                                EditorUtility.DisplayDialog("FAILURE", "The request could not be processed due to a status of " + request.state + ".", "Ok");
                            }

                            CIController.State = CryptoItemsController.CryptoItemState.MAIN;
                        }
                        RequestsCompleted.Add(entry.Key);
                    }
                    else
                    {
                        if (EditorUtility.DisplayDialog("SUCCESS", "A pending request has posted successfully. Refresh now?\n\nNote, refreshing will return you to the index and clear any active data entry.", "Refresh", "Cancel"))
                        {
                            EnjinEditor.ExecuteMethod(EnjinEditor.CallMethod.RELOADITEMS);
                            CIController.Reset();
                        }
                        RequestsCompleted.Add(entry.Key);
                    }
                    break;

                case Status.FAILURE:
                    if (EditorUtility.DisplayDialog("FAILURE", "A pending request could not be processed due to a status of " + entry.Value.Status + ". Refresh now?\n\nNote, refreshing will return you to the index and clear any active data entry.", "Refresh", "Cancel"))
                    {
                        EnjinEditor.ExecuteMethod(EnjinEditor.CallMethod.RELOADITEMS);
                        CIController.Reset();
                    }
                    RequestsCompleted.Add(entry.Key);
                    break;
                }
            }
            else if (entry.Value.Type == Result.Types.IDENTITIES)
            {
                // noop -- stub example for future notifications
            }
            else
            {
                // noop
            }
        }

        if (RequestsCompleted.Count > 0)
        {
            RequestsCompleted.ForEach(e => ResultsQueue.Remove(e));
        }

        // Done processing result queue.
        Processing = false;
    }