Example #1
0
        public bool IsEqualTo(IMarketState marketState)
        {
            if (marketState == null)
            {
                throw new ArgumentNullException("marketState");
            }

            if (ReferenceEquals(this, marketState))
            {
                return(true);
            }

            if (marketState.Id != this.Id)
            {
                throw new Exception("Cannot compare two markets with different Ids");
            }

            if (marketState.Name != this.Name)
            {
                return(false);
            }

            var isStatusEqual = this.IsPending == marketState.IsPending &&
                                this.IsResulted == marketState.IsResulted &&
                                this.IsSuspended == marketState.IsSuspended &&
                                this.IsActive == marketState.IsActive &&
                                this.IsDeleted == marketState.IsDeleted &&
                                this.IsForcedSuspended == marketState.IsForcedSuspended &&
                                this.IsVoided == marketState.IsVoided;


            if (isStatusEqual)
            {
                if (this.HasTag("line") && marketState.HasTag("line"))
                {
                    isStatusEqual = string.Equals(this.GetTagValue("line"), marketState.GetTagValue("line"));
                }


                if (IsRollingMarket)
                {
                    isStatusEqual &= Line == marketState.Line;
                }

                isStatusEqual = isStatusEqual && marketState.Selections.All(s => _selectionStates.ContainsKey(s.Id) && _selectionStates[s.Id].IsEqualTo(s));
            }

            return(isStatusEqual);
        }
        private static Market CreateSuspendedMarket(IMarketState MarketState)
        {

            var market = new Market(MarketState.Id) {IsSuspended = true};

            if (MarketState.HasTag("line"))
            {
                market.AddOrUpdateTagValue("line", MarketState.GetTagValue("line"));
            }

            foreach (var stateSelection in MarketState.Selections)
                market.Selections.Add(new Selection { Id = stateSelection.Id, Status = SelectionStatus.Pending, Tradable = false, Price = 0 });

            return market;
        }
Example #3
0
        private static Market CreateSettledMarket(IMarketState MarketState)
        {
            var market = new Market(MarketState.Id);

            if (MarketState.HasTag("line"))
            {
                market.AddOrUpdateTagValue("line", MarketState.GetTagValue("line"));
            }

            foreach (var seln in MarketState.Selections)
            {
                market.Selections.Add(new Selection {
                    Id = seln.Id, Status = SelectionStatus.Void, Price = 0
                });
            }

            return(market);
        }
Example #4
0
        private static Market CreateSuspendedMarket(IMarketState MarketState)
        {
            var market = new Market(MarketState.Id)
            {
                IsSuspended = true
            };

            if (MarketState.HasTag("line"))
            {
                market.AddOrUpdateTagValue("line", MarketState.GetTagValue("line"));
            }

            foreach (var stateSelection in MarketState.Selections)
            {
                market.Selections.Add(new Selection {
                    Id = stateSelection.Id, Status = SelectionStatus.Pending, Tradable = false, Price = 0
                });
            }

            return(market);
        }
        private void BuildDefaultStrategies()
        {
            DoNothingStrategy = x => { };

            SuspendFixtureStrategy = x => _plugin.Suspend(x.FixtureId);

            SuspendFixtureIfInPlayStrategy = x => { if (x.FixtureStatus == MatchStatus.InRunning)
                                                    {
                                                        _plugin.Suspend(x.FixtureId);
                                                    }
            };

            SuspendAllMarketsStrategy = x =>
            {
                IEnumerable <IMarketState> includedMarketStates;
                var fixture = GetFixtureWithSuspendedMarkets(x, out includedMarketStates);

                _logger.DebugFormat("Sending suspension command through the plugin for fixtureId={0}", x.FixtureId);

                _plugin.ProcessStreamUpdate(fixture);

                _logger.InfoFormat("Marking markets for fixtureId={0} as suspended", x.FixtureId);
                ((IUpdatableMarketStateCollection)x).OnMarketsForcedSuspension(includedMarketStates);
            };

            SuspendAllMarketsAndSetMatchStatusDeleted = x =>
            {
                IEnumerable <IMarketState> includedMarketStates;

                var fixture = GetFixtureWithSuspendedMarkets(x, out includedMarketStates);
                fixture.MatchStatus = ((int)MatchStatus.Deleted).ToString();

                _logger.DebugFormat("Sending suspension command through the plugin for fixtureId={0} and setting its MatchStatus as deleted", x.FixtureId);
                _plugin.ProcessStreamUpdate(fixture);

                _logger.InfoFormat("Marking markets for fixtureId={0} as suspended", x.FixtureId);
                ((IUpdatableMarketStateCollection)x).OnMarketsForcedSuspension(includedMarketStates);
            };

            SuspendFixtureAndSetMatchStatusDeleted = x =>
            {
                var fixture = new Fixture
                {
                    Id          = x.FixtureId,
                    MatchStatus = ((int)MatchStatus.Deleted).ToString(),
                    Sequence    = x.FixtureSequence
                };


                _logger.DebugFormat("Sending suspension command through the plugin for fixtureId={0} and setting its MatchStatus as deleted", x.FixtureId);
                _plugin.ProcessStreamUpdate(fixture);

                _logger.InfoFormat("Marking markets for fixtureId={0} as suspended", x.FixtureId);
            };

            SuspendInPlayMarketsStrategy = x =>
            {
                List <IMarketState> includedMarketStates = new List <IMarketState>();

                var fixture = new Fixture
                {
                    Id          = x.FixtureId,
                    MatchStatus = ((int)x.FixtureStatus).ToString(),
                    Sequence    = x.FixtureSequence
                };

                foreach (var mkt_id in x.Markets)
                {
                    // we take a conservative approach here.
                    // If, for any reason, the traded_in_play
                    // is not present, we assume it is. Better
                    // to suspend more markets, than less
                    IMarketState state = x[mkt_id];
                    if (state.HasTag("traded_in_play") &&
                        string.Equals(state.GetTagValue("traded_in_play"), "false", StringComparison.OrdinalIgnoreCase))
                    {
                        _logger.DebugFormat("marketId={0} of fixtureId={1} will not be suspended as it is not traded in play", mkt_id, fixture.Id);
                        continue;
                    }

                    if (!state.HasBeenActive)
                    {
                        _logger.DebugFormat("marketId={0} of fixtureId={1} will not be suspended as it has not been active before", mkt_id, fixture.Id);
                        continue;
                    }

                    includedMarketStates.Add(state);
                    fixture.Markets.Add(CreateMarket(x[mkt_id]));
                }


                _logger.DebugFormat("Sending suspension command through the plugin for in-play markets of fixtureId={0}", x.FixtureId);
                _plugin.ProcessStreamUpdate(fixture);

                _logger.InfoFormat("Marking markets for fixtureId={0} as suspended", x.FixtureId);
                ((IUpdatableMarketStateCollection)x).OnMarketsForcedSuspension(includedMarketStates);
            };
        }
        private static Market CreateSettledMarket(IMarketState MarketState)
        {
            var market = new Market (MarketState.Id);

            if (MarketState.HasTag("line"))
            {
                market.AddOrUpdateTagValue("line", MarketState.GetTagValue("line"));
            }

            foreach (var seln in MarketState.Selections)
                market.Selections.Add(new Selection { Id = seln.Id, Status = SelectionStatus.Void, Price = 0 });

            return market;
        }
        public bool IsEqualTo(IMarketState marketState)
        {
            if (marketState == null)
                throw new ArgumentNullException("marketState");

            if (ReferenceEquals(this, marketState))
                return true;
            
            if (marketState.Id != this.Id)
                throw new Exception("Cannot compare two markets with different Ids");

            if (marketState.Name != this.Name)
                return false;

            var isStatusEqual = this.IsPending == marketState.IsPending &&
                                this.IsResulted == marketState.IsResulted &&
                                this.IsSuspended == marketState.IsSuspended &&
                                this.IsActive == marketState.IsActive &&
                                this.IsDeleted == marketState.IsDeleted &&
                                this.IsForcedSuspended == marketState.IsForcedSuspended &&
                                this.IsVoided == marketState.IsVoided;
            

            if (isStatusEqual)
            {
                if (this.HasTag("line") && marketState.HasTag("line"))
                {
                    isStatusEqual = string.Equals(this.GetTagValue("line"), marketState.GetTagValue("line"));
                }


                if (IsRollingMarket)
                {
                    isStatusEqual &= Line == marketState.Line;
                }

                isStatusEqual = isStatusEqual && marketState.Selections.All(s => _selectionStates.ContainsKey(s.Id) && _selectionStates[s.Id].IsEqualTo(s));
            }

            return isStatusEqual;
        }