/// <summary> /// Processes and dispatches the provided <see cref="FeedMessage" /> instance /// </summary> /// <param name="message">A <see cref="FeedMessage" /> instance to be processed</param> /// <param name="interest">A <see cref="MessageInterest"/> specifying the interest of the associated session</param> /// <param name="rawMessage">A raw message received from the feed</param> public void ProcessMessage(FeedMessage message, MessageInterest interest, byte[] rawMessage) { Guard.Argument(message, nameof(message)).NotNull(); Guard.Argument(interest, nameof(interest)).NotNull(); if (message.IsEventRelated) { _sportEventStatusCache.AddEventIdForTimelineIgnore(message.EventURN, message.ProducerId, message.GetType()); } // process odds_change var oddsChange = message as odds_change; if (oddsChange?.sport_event_status != null) { var status = _mapperFactory.CreateMapper(oddsChange.sport_event_status).Map(); _cacheManager.SaveDto(oddsChange.EventURN, status, CultureInfo.CurrentCulture, DtoType.SportEventStatus, null); } var betStop = message as bet_stop; if (betStop != null) { // draw event is still removed RemoveCacheItem(betStop.EventURN, removeEvent: false, removeSportEventStatus: true); } var betSettlement = message as bet_settlement; if (betSettlement != null) { // draw event is still removed RemoveCacheItem(betSettlement.EventURN, removeEvent: false, removeSportEventStatus: false); } // process fixtureChange var fixtureChange = message as fixture_change; if (fixtureChange != null) { RemoveCacheItem(fixtureChange.EventURN, removeEvent: true, removeSportEventStatus: true); _sportEventCache.AddFixtureTimestamp(fixtureChange.EventURN); if (fixtureChange.EventURN.TypeGroup == ResourceTypeGroup.TOURNAMENT) { HandleTournamentFixtureChange(fixtureChange.EventURN); } if (_feedMessageHandler.StopProcessingFixtureChange(fixtureChange)) { // fixtureChange was already dispatched (via another session) return; } } }
/// <summary> /// Processes and dispatches the provided <see cref="FeedMessage" /> instance /// </summary> /// <param name="message">A <see cref="FeedMessage" /> instance to be processed</param> /// <param name="interest">A <see cref="MessageInterest"/> specifying the interest of the associated session</param> /// <param name="rawMessage">A raw message received from the feed</param> public void ProcessMessage(FeedMessage message, MessageInterest interest, byte[] rawMessage) { Guard.Argument(message, nameof(message)).NotNull(); Guard.Argument(interest, nameof(interest)).NotNull(); // process odds_change var oddsChange = message as odds_change; if (oddsChange?.sport_event_status != null) { var status = _mapperFactory.CreateMapper(oddsChange.sport_event_status).Map(); _cacheManager.SaveDto(oddsChange.EventURN, status, CultureInfo.CurrentCulture, DtoType.SportEventStatus, null); } var betStop = message as bet_stop; if (betStop != null) { // draw event is still removed RemoveCacheItem(betStop.EventURN, removeEvent: false, removeSportEventStatus: true); } var betSettlement = message as bet_settlement; if (betSettlement != null) { // draw event is still removed RemoveCacheItem(betSettlement.EventURN, removeEvent: false, removeSportEventStatus: false); } // process fixtureChange var fixtureChange = message as fixture_change; if (fixtureChange != null) { RemoveCacheItem(fixtureChange.EventURN, removeEvent: true, removeSportEventStatus: true); _sportEventCache.AddFixtureTimestamp(fixtureChange.EventURN); if (fixtureChange.EventURN.TypeGroup == ResourceTypeGroup.TOURNAMENT) { HandleTournamentFixtureChange(fixtureChange.EventURN); } if (_feedMessageHandler.StopProcessingFixtureChange(fixtureChange)) { // fixtureChange was already dispatched (via another session) return; } //ExecutionLog.LogDebug($"{ProcessorId}: processing fixtureChange for id={fixtureChange.EventId}, producer={fixtureChange.ProducerId} and timestamp={fixtureChange.GeneratedAt}."); } RaiseOnMessageProcessedEvent(new FeedMessageReceivedEventArgs(message, interest, rawMessage)); }