예제 #1
0
        public void KeepFresh(IDataContext context, IAssetPairsProvider exchange, bool ignoreFreshState = false)
        {
            if (IsFresh(ignoreFreshState))
            {
                return;
            }

            lock (Lock)
            {
                if (IsFresh(ignoreFreshState))
                {
                    return;
                }

                var r = ApiCoordinator.GetAssetPairs(exchange);
                if (r.IsFailed)
                {
                    return;
                }

                AssetPairs = r.Response;
                AssetPairs.UtcLastUpdated = DateTime.UtcNow;

                Assets = AssetPairs.Select(x => x.Asset1).Union(AssetPairs.Select(x => x.Asset2)).OrderBy(x => x.ShortCode).ToUniqueList();

                this.Save(context);
            }
        }
예제 #2
0
        protected void GetAssetPairs(IAssetPairsProvider provider, AssetPairs requiredPairs)
        {
            var ctx = new NetworkProviderContext();

            try
            {
                var pairs = AsyncContext.Run(() => provider.GetAssetPairsAsync(ctx));

                Assert.IsTrue(pairs != null);
                Assert.IsTrue(pairs.Count > 0);

                if (requiredPairs != null)
                {
                    Trace.WriteLine("Checked pairs:");
                    foreach (var requiredPair in requiredPairs)
                    {
                        var contains = pairs.Contains(requiredPair);
                        Assert.IsTrue(contains, $"Provider didn't return required {requiredPair} pair.");

                        Trace.WriteLine(requiredPair);
                    }
                }

                Trace.WriteLine("\nRemote pairs from exchange:");
                foreach (var pair in pairs)
                {
                    Trace.WriteLine(pair);
                }
            }
            catch (Exception e)
            {
                Assert.Fail(e.Message);
            }
        }
예제 #3
0
        protected void GetAssetPairsTest(IAssetPairsProvider provider, AssetPairs requiredPairs)
        {
            var ctx = new NetworkProviderContext();

            var pairs = AsyncContext.Run(() => provider.GetAssetPairsAsync(ctx));

            Assert.True(pairs != null);
            Assert.True(pairs.Count > 0);

            if (requiredPairs != null)
            {
                OutputWriter.WriteLine("Checked pairs:");
                foreach (var requiredPair in requiredPairs)
                {
                    var contains = pairs.Contains(requiredPair);
                    Assert.True(contains, $"Provider didn't return required {requiredPair} pair.");

                    OutputWriter.WriteLine(requiredPair.ToString());
                }
            }

            OutputWriter.WriteLine("\nRemote pairs from exchange:");
            foreach (var pair in pairs)
            {
                OutputWriter.WriteLine(pair.ToString());
            }
        }
예제 #4
0
        public static Task <ApiResponse <AssetPairs> > GetAssetPairsAsync(IAssetPairsProvider provider, NetworkProviderContext context = null)
        {
            context = context ?? new NetworkProviderContext();

            return(AssetPairCache.I.TryAsync(provider, () => ApiHelpers.WrapExceptionAsync(() => provider.GetAssetPairsAsync(context), nameof(GetAssetPairs), provider, context)));
        }
예제 #5
0
 public static ApiResponse <AssetPairs> GetAssetPairs(IAssetPairsProvider provider, NetworkProviderContext context = null)
 {
     return(AsyncContext.Run(() => GetAssetPairsAsync(provider, context)));
 }