コード例 #1
0
        public CatalogueFilter(MarketFilter baseMarketFilter, MarketCatalogueFilter filterId)
        {
            _startOffsetHours = baseMarketFilter.MarketStartTime.From.Subtract(DateTime.Now).TotalHours;
            _endOffsetHours   = baseMarketFilter.MarketStartTime.To.Subtract(DateTime.Now).TotalHours;

            _baseMarketFilter = baseMarketFilter;
            FilterId          = filterId;
        }
コード例 #2
0
        private void DoWorkInner(MarketCatalogueFilter key, CatalogueFilter cf)
        {
            BetfairServerResponse <List <MarketCatalogue> > book;

            try
            {
                book = _client.ListMarketCatalogue(
                    cf.MarketFilter,
                    cf.Projection,
                    cf.MarketSort,
                    cf.MaxResult).Result;
            }
            catch (AggregateException ex)
            {
                foreach (var e in ex.Flatten().InnerExceptions)
                {
                    _logger.Invoke(e, $"key: {key} filterId: {cf.FilterId}");
                }
                return;
            }

            if (book.HasError)
            {
                foreach (var observer in _observers)
                {
                    observer.Value.OnError(book.Error);
                }
                return;
            }

            // we may have fresher data than the response to this request
            if (book.RequestStart < _latestDataRequestStart && book.LastByte > _latestDataRequestFinish)
            {
                return;
            }

            //TODO: locking here is per MarketFilter request... but we do multiples requests; 1 per CatalogueFilter...
            lock (_lockObj)
            {
                _latestDataRequestStart  = book.RequestStart;
                _latestDataRequestFinish = book.LastByte;
            }

            IObserver <List <MarketCatalogue> > o;

            if (!_observers.TryGetValue(key, out o))
            {
                return;
            }

            //TODO: would we ever need to call OnCompleted... don't think so?
            //if (someCondition)
            // o.OnCompleted();
            // else
            o.OnNext(book.Response);
        }
コード例 #3
0
 public CatalogueFilter(MarketCatalogueFilter filterId)
 {
     FilterId = filterId;
     // Hide this
 }