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; }
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); }
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; }