Beispiel #1
0
        public void combined_promise_of_four_types_is_resolved_when_children_are_resolved()
        {
            var promise1 = new Promise <int>();
            var promise2 = new Promise <bool>();
            var promise3 = new Promise <float>();
            var promise4 = new Promise <double>();

            TestHelpers.VerifyDoesntThrowUnhandledException(() =>
            {
                var all = PromiseHelpers.All(promise1, promise2, promise3, promise4);

                var completed = 0;

                all.Then(v =>
                {
                    ++completed;

                    Assert.Equal(1, v.Item1);
                    Assert.Equal(true, v.Item2);
                    Assert.Equal(3.0f, v.Item3);
                    Assert.Equal(4.0, v.Item4);
                });

                promise1.Resolve(1);
                promise2.Resolve(true);
                promise3.Resolve(3.0f);
                promise4.Resolve(4.0);

                Assert.Equal(1, completed);
            });
        }
        public void combined_promise_of_three_types_is_resolved_when_children_are_resolved()
        {
            var promise1 = new Promise <int>();
            var promise2 = new Promise <bool>();
            var promise3 = new Promise <float>();

            var all = PromiseHelpers.All(promise1, promise2, promise3);

            var completed = 0;

            all.Then(v =>
            {
                ++completed;

                Assert.Equal(1, v.Item1);
                Assert.Equal(true, v.Item2);
                Assert.Equal(3.0f, v.Item3);
            });

            promise1.Resolve(1);
            promise2.Resolve(true);
            promise3.Resolve(3.0f);

            Assert.Equal(1, completed);
        }
Beispiel #3
0
        public void combined_promise_of_multiple_types_is_resolved_when_children_are_resolved()
        {
            var promise1 = new Promise <int>();
            var promise2 = new Promise <bool>();

            TestHelpers.VerifyDoesntThrowUnhandledException(() =>
            {
                var all = PromiseHelpers.All(promise1, promise2);

                var completed = 0;

                all.Then(v =>
                {
                    ++completed;

                    Assert.Equal(1, v.Item1);
                    Assert.Equal(true, v.Item2);
                });

                promise1.Resolve(1);
                promise2.Resolve(true);

                Assert.Equal(1, completed);
            });
        }
Beispiel #4
0
        public void combined_promise_of_multiple_types_is_rejected_when_both_promises_are_rejected()
        {
            var promise1 = new Promise <int>();
            var promise2 = new Promise <bool>();

            TestHelpers.VerifyDoesntThrowUnhandledException(() =>
            {
                var all = PromiseHelpers.All(promise1, promise2);

                all.Then(v => throw new Exception("Shouldn't happen"));

                var errors = 0;
                all.Catch(e => ++ errors);

                promise1.Reject(new Exception("Error!"));
                promise2.Reject(new Exception("Error!"));

                Assert.Equal(1, errors);
            });
        }
        public void combined_promise_of_multiple_types_is_resolved_when_all_promises_are_already_resolved()
        {
            var promise1 = Promise <int> .Resolved(1);

            var promise2 = Promise <bool> .Resolved(true);

            var all = PromiseHelpers.All(promise1, promise2);

            var completed = 0;

            all.Then(v =>
            {
                ++completed;

                Assert.Equal(1, v.Item1);
                Assert.Equal(true, v.Item2);
            });

            Assert.Equal(1, completed);
        }
        public void combined_promise_of_multiple_types_is_rejected_when_both_promises_are_rejected()
        {
            var promise1 = new Promise <int>();
            var promise2 = new Promise <bool>();

            var all = PromiseHelpers.All(promise1, promise2);

            all.Then(v =>
            {
                throw new ApplicationException("Shouldn't happen");
            });

            var errors = 0;

            all.Catch(e =>
            {
                ++errors;
            });

            promise1.Reject(new ApplicationException("Error!"));
            promise2.Reject(new ApplicationException("Error!"));

            Assert.Equal(1, errors);
        }
Beispiel #7
0
        public IPromise <T> Create <T>(Func <IPromise <T> > action, PromisePriority priority)
        {
            if (_disposed)
            {
                throw new ObjectDisposedException("PromiseFactory");
            }

            switch (priority)
            {
            case PromisePriority.Normal:
                return(new NormalPromise <T>(this, _taskFactory, _taskFactory.Create(() => PromiseHelpers.ConvertPromiseToTaskResult <T>(_taskFactory, action()))));

            case PromisePriority.Immediate:
                return(new NormalPromise <T>(this, _taskFactory, _taskFactory.CreateImmediately(() => PromiseHelpers.ConvertPromiseToTaskResult <T>(_taskFactory, action()))));

            default:
                return(new NormalPromise <T>(this, _taskFactory, _taskFactory.Create(() => PromiseHelpers.ConvertPromiseToTaskResult <T>(_taskFactory, action()), (int)priority)));
            }
        }
Beispiel #8
0
        public IPromise <T> SetTimeout <T>(int delay, Func <IPromise <T> > action, PromisePriority priority)
        {
            if (_disposed)
            {
                throw new ObjectDisposedException("PromiseFactory");
            }

            switch (priority)
            {
            case PromisePriority.Normal:
                return(new NormalPromise <T>(this, _taskFactory, _taskFactory.BeginFuture(Environment.TickCount + delay, () => PromiseHelpers.ConvertPromiseToTaskResult(_taskFactory, action()))));

            default:
                return(new NormalPromise <T>(this, _taskFactory, _taskFactory.BeginFuture(Environment.TickCount + delay, () => PromiseHelpers.ConvertPromiseToTaskResult(_taskFactory, action()), (int)priority)));
            }
        }
Beispiel #9
0
    public void UpdateEntities(bool forceRefresh)
    {
        ClearSiteMarkers();
        ClearSiteLinks();
        _wanManager.DestroyWans();

        var siteMarkersPromise = _dataManager.GetSites(forceRefresh)
                                 .Then(sites => {
            foreach (Site site in sites)
            {
                if (site.coordinates.isValid)
                {
                    if (earthSphere.activeSelf)
                    {
                        currentSiteMarkers.Add(site.id, earthSphere.GetComponent <GlobeSiteCreation>().placeSiteMarker(site, site.coordinates));
                    }
                    else
                    {
                        currentSiteMarkers.Add(site.id, flatMap.GetComponent <FlatSiteCreation>().placeSiteMarker(site, site.coordinates));
                    }
                }
                else
                {
                    Debug.LogWarning($"Coordinates for site {site.id} are not valid, not adding site marker");
                }
            }


            return(currentSiteMarkers);
        });

        var sitelinkMarkersPromise = PromiseHelpers.All(siteMarkersPromise, _dataManager.GetSitelinkPairs(forceRefresh))
                                     .Then(tup => {
            Dictionary <SiteId, SiteMarker> siteMarkers = tup.Item1;
            List <SitelinkPair> sitelinkPairs           = tup.Item2;

            foreach (SitelinkPair sitelinkPair in sitelinkPairs)
            {
                Debug.Log($"Sitelink pair has {sitelinkPair.pair.Count} sitelinks");
                if (sitelinkPair.IsValid())
                {
                    SitelinkReporting sitelink0 = sitelinkPair.pair[0];
                    SitelinkReporting sitelink1 = sitelinkPair.pair[1];

                    Debug.Log($"Sitelink pair {sitelink0.id}/{sitelink1.id} between {sitelink0.local_site} and {sitelink0.remote_site}: first element of pair has status({sitelink0.status}) state({sitelink0.state})");

                    // For now, just use sitelink0 as "the" sitelink. The problem with this is, the order of sitelinks
                    // in a pair is probably not deterministic, so they may swap between refreshes.
                    // TODO: Deal with this somehow, eg. sitelink markers have SitelinkPairs attached, not just a single sitelink.

                    if (siteMarkers.ContainsKey(sitelink0.local_site) && siteMarkers.ContainsKey(sitelink0.remote_site))
                    {
                        if (earthSphere.activeSelf)
                        {
                            _currentSitelinkMarkers.Add(earthSphere.GetComponent <GlobeSiteCreation>().placeSitelinkMarker(sitelinkPair, currentSiteMarkers));
                        }
                        else
                        {
                            _currentSitelinkMarkers.Add(flatMap.GetComponent <FlatSiteCreation>().placeSitelinkMarker(sitelinkPair, currentSiteMarkers));
                        }
                    }
                    else
                    {
                        Debug.LogWarning($"Sitelink between {sitelink0.local_site} and {sitelink0.remote_site} can't be drawn because one or both sitemarkers are missing");
                    }
                }
                else
                {
                    Debug.LogError("A sitelink pair is invalid!");
                }
            }
        })
                                     .Then(() => {
            _wanManager.UpdateWans(forceRefresh);
        })
                                     .Catch(err => Debug.LogError($"Error updating entities: {err.Message}\n{err.StackTrace}"));
    }