コード例 #1
0
        public void Dispose()
        {
            DisposeSaveTimer();

            DisposeUpdateTimer();

            syncRoot.Dispose();

            savingSemaphore.Dispose();

            PriceHistoryManager.Dispose();
        }
コード例 #2
0
        public void Dispose()
        {
            syncRoot?.Dispose();
            syncRoot = null;

            savingSemaphore?.Dispose();
            savingSemaphore = null;

            saveTimer?.Stop();
            saveTimer?.Dispose();
            saveTimer = null;

            updateTimer?.Stop();
            updateTimer?.Dispose();
            updateTimer = null;

            PriceHistoryManager?.Dispose();
            PriceHistoryManager  = null;
            TradesHistoryManager = null;
        }
コード例 #3
0
        private async void UpdateTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            await syncRoot.WaitAsync();

            try
            {
                PriceHistoryManager.Update();
                await MarketTickersManager.Update();

                updateTimer.Start();
                OnUpdate?.Invoke();
            }
            catch (Exception exc)
            {
                OnError?.Invoke(exc);
            }
            finally
            {
                syncRoot.Release();
            }
        }
コード例 #4
0
        public async Task OnUpdates(ExchangeUpdate updates)
        {
            await syncRoot.WaitAsync();

            try
            {
                AnalyticsExchange.OnUpdates(updates);
                await PriceHistoryManager.OnTrade(updates);

                TradesHistoryManager.OnTrade(updates);
                MarketDepthsManager.OnOrderUpdates(updates);
            }
            catch (Exception exc)
            {
                //TODO: add support for delayed trades, now it failes during rising
                OnError?.Invoke(exc);
                logger.Error(exc);
            }
            finally
            {
                syncRoot.Release();
            }
        }
コード例 #5
0
        public async Task SaveUpdates(IAnalyticsStorage analyticsStorage, int maxAttempts = 5)
        {
            await savingSemaphore.WaitAsync();

            try
            {
                var frames = PriceHistoryManager.PullUpdates();
                if (frames.Count < 1)
                {
                    return;
                }
                var attempt = 0;
                while (attempt < maxAttempts)
                {
                    try
                    {
                        var frameModels = frames.Select(f => f.ToFrameModel()).ToList();
                        await analyticsStorage.SaveAnalytics(frameModels);

                        break;
                    }
                    catch
                    {
                        attempt++;
                        if (attempt == maxAttempts)
                        {
                            throw;
                        }
                        Thread.Sleep(attempt * 500);
                    }
                }
            }
            finally
            {
                savingSemaphore.Release();
            }
        }
コード例 #6
0
        public async Task SaveUpdates(IAnalyticsStorage analyticsStorage, int numberOfTries = 5)
        {
            await savingSemaphore.WaitAsync();

            try
            {
                var frames = PriceHistoryManager.PullUpdates();
                if (frames.Count < 1)
                {
                    return;
                }
                var currentTry = 0;
                while (currentTry < numberOfTries)
                {
                    try
                    {
                        var frameModels = frames.Select(f => f.ToFrameModel()).ToList();
                        await analyticsStorage.SaveAnalytics(frameModels);

                        break;
                    }
                    catch
                    {
                        currentTry++;
                        if (currentTry == numberOfTries)
                        {
                            throw;
                        }
                        Thread.Sleep(currentTry * 500);
                    }
                }
            }
            finally
            {
                savingSemaphore.Release();
            }
        }
コード例 #7
0
        public async Task Restore(DateTime dateTime)
        {
            await PriceHistoryManager.Restore(dateTime);

            MarketDepthsManager.Restore(dateTime);
        }
コード例 #8
0
 public MarketTickersManager(List <int> markets, PriceHistoryManager framesManager)
 {
     this.framesManager = framesManager ?? throw new ArgumentNullException(nameof(framesManager));
     period             = Enum.GetValues(typeof(PriceHistoryPeriod)).Cast <PriceHistoryPeriod>().Min();
     this.markets       = markets;
 }