UnifiedFeed SDK - Net

Versions: (11/16/2018) recommended
Extended IOddFeed with IOddsFeedV1 - new property BookmakerDetails available on OddsFeed
Improved handling of competitor reference id(s)
Removed purging of sportEventStatus from cache on betSettlement message
Fix: minimized rest api calls - removed calls for eng, when not needed (requires language to be set in configuration)
Fix: when sdk returned field null value although it is present; also avoids repeated api request (10/17/2018)
Extended ITimelineEvent with ITimelineEventV1 - added MatchClock and MatchStatusCode properties
Extended IMatchStatus with IMatchStatusV1 - added HomePenaltyScore and AwayPenaltyScore (used in Ice Hockey)
Added more logs in ProducerRecoveryManager when status changes
Added more explanation in log message when wrong timestamp is set in AddTimestampBeforeDisconnect method
Added warn message for negative nodeId (negative id is reserved for internal use only)
Removed logging of response headers in LogProxy class on debug level
Fix: calling the summary with nodeId if specified (on replay server) - sport event status changes during replay of the match
Fix: Improvement of fetching and caching of SportEventStatus when called directly
Fix: schedule on CurrentSeasonInfo was not filled with data from API (9/18/2018)
Added new event status: EventStatus.Interrupted
Market / outcome name construction from competitor abbreviations (if missing)
Improved logging in DataRouterManager
Improved recovery procedure (to avoid The recovery operation is already running exception)
Fix: exception during fetching event fixture or summary is exposed to user (for ExceptionHandlingStrategy.THROW setting)
Fix: error when associated players method returning null
Fix: MarketMapping for variant markets returns correctly
Fix: remove sportEvent from cache on betStop and betSettlement message (to purge its sportEventStatus) (8/24/2018)
Added support for outcome odds in different formats
Introduced IOutcomeOddsV1 extending IOutcomeOdds with method GetOdds(OddsDisplayType)
ReplayServer example updated with PlayScenario
Increased RabbitMQ.Client library to 3.6.9
Fix: repaired Schedule and ScheduleEnd times for simple_tournament events
Fix: ISeason.TournamentInfo.Names contains all fetched values (before only first) (7/23/2018)
Exposed property TeamFlag and HomeOrAwayTeam on IPlayerOutcomeOdds
Added support for Virtual Sports In-play message type
Added Pitcher info on SportEventConditions
Update: removing draw events from cache on DrawStatus change
Update: variant markets expiration time set to 1h
Update: added logging for sync fetcher
Fix: internally updating competitors when competitors changes on sportEvent
Fix: generation of sportEvent name with $event name template
Fix: DataRouterManager - updated logs when fetching tournament seasons
Fix: generating mapped outcomes with $score sov which dont have attribute is_flex_score
Fix: thread safety issue in ProductRecoveryManager class
Fix: statistics properties loaded from config section when needed; added CacheManager statistics
Fix: NameProvider.GetOutcomeNameFromProfileAsync returns result for ILongTermEvent without competitors (6/11/2018)
Added property RotationNumber to ReferenceIds
Mapped outcomes supports translatable name
Added support for multiple market and outcome mappings
Added mapped marketId to the IOutcomeMapping
Outcome mappings for flex_score_markets take into account the score specifiers
Removed checks for requestId on feed messages
Exposed ScheduledStartTimeChanges on IFixture
Ensured fixture change messages are dispatched only once
Improved generation of outcome names for sr:players
Improved handling of caching for simpleteam competitor and betradarId for simpleteams
In SportEventStatus in the Properties only int values are saved for Status and MatchStatus properties
Updating cached sport event booking status when user books event
Fix: Child stage links to parent stage or parent tournament
Fix: loading of EventResult
Fix: SportEventCache cannot fetch multiple times for the same date
Fix: ICompetition.GetConditionsAsync did not load for all cultures
Fix: saving-caching special tournament data
Fix: Venue on competition (4/26/2018)
Added CountryCode property to IVenue
Added AdjustAfterAge property to Section and ConfigurationBuilders
Added local time check against bookmaker details response header
Added PhaseOrGroupLongName property to IRound
WNS endpoints are called only if WNS available
Improved handling of sport event status obtained from feed or API
All recovery methods takes into account the specified nodeId
Fix: missing market description or outcome no longer throws exception
Fix: loading of tournament data for season events
Fix: print of SportEventConditions
Fix: FixtureDTO mapping for ReplacedBy property
Internal: added exception handling strategy to DataRouterManager
Other minor fixes and improvements (4/3/2018)
New configuration builders
Added support for replaying of events messages generated by a specific producer
Removed restrictions on speed and maxDelay in ReplayManager
Exposed RawMessage on a IEventMessage{T} (returns byte array received from feed)
Removed asynchronous call within Feed ctor
Added 'Postponed' value to enum EventStatus
IEventResult properties Points, Climber and Sprint marked obsolete
Introduced new decimal properties to IEventResult: PointsDecimal, WcPoints, ClimberDecimal and SprintDecimal
Added properties ReplacedBy, NextLiveTime and StartTimeTBD to IFixture
Fix: exception when season has no groups
Fix: getting TournamentInfo on Season instance
Fix: displaying correct CurrentSeasonInfo on ISeason
Fix: loading competitors for stage events, loading category for stage events
Fix: loading draw events for lottery;
Fix: loading draw fixture
Internal: improved how recovery is made
Internal: improvements in caches to avoid exceptions, locks, ...
Other minor fixes and improvements (3/1/2018)
Exposed VoidReason on BetCancel, BetSettlement, ... (introduced IMarketCancel interface)
Added property Timestamp to all feed messages (time when message was generated)
Updated IPeriodScore to reflect new rest and feed periodScoreType
Added GetMatchStatusAsync on IPeriodScore and IEventResult (it returns the same value as on IMatchStatus)
Updated some types of properties on IEventResult to correctly reflect those on Sport API
Improved handling of recovery and producer status based on feed messages
Internal: CacheManager made non-static - now supports multiple feed instances
Internal: hardening of cache handling for automatically fetching data
DemoProject updated
Fix: updated how IReplayManager.AddSportEventToReplay behaves when startTime is not specified
Fix: fixed how variant markets are cached (includes player props markets)
Fix: ITournament.GetSeasonsAsync always returned null
Fix: running multiple feed instances at the same time or scenario open-close-open of the same instance
Fix: correctly handling of decimal value in outcome name with +/- name template
Other minor fixes and improvements, improved internal exception handling (2/12/2018)
Added support for WNS/lottery (new IDraw and ILottery sport event)
Added property DelayedInfo to IMatch
Added property ProductsId to IMarketMapping
Internal: optimization of data distribution amoung sdk caches
Fix: MarketCacheProvider throwing exception when no market description found
Fix: handling of logging exception when error happens receiving data from Sports API
Other minor improvements and fixes (1/30/2018)
Added support for $event name template
Added support for match booking
Updated support for variant markets
Removed log4net logging library and introduced Common.Logging library.
OddsFeedConfigurationBuilder enables the user to specify the connection should be made to staging environment
Fix: Category property on ISport and ITournament always returned null
Other minor improvements and bug fixes

Note: Version of 1.3.0 of the Unified Feed SDK introduced an usage of Common.Logging (https://github.com/net-commons/common-logging) library to allow the users more control over SDK logging. The change requires some changes to the configuration of logging platform. For an example using log4net please check the latest SDK example. (1/15/2018)
SportEvent hierarchy overhaul - 'stage' support
Improved recovery process - on slow message processing, producer is marked as down
Added Certainty to BetSettlement message
Added support for Market MetaData on oddsChange message
Added support for multiple Groups on BetStop message
Exposed additional market info through market definitions
Added support for SoccerEvent, SoccerStatus
Expanded PlayerProfile and Competitor to support Manager, Jersey info
Exposed event timeline on IMatch entity
Exposed tournament seasons on ITournament entity
Exposed methods for clearing cache data on ISportDataProvider
NodeId supports negative numbers
Added support for nodeId on Replay server on all methods
Internally: changed how caches works and added CacheManager (11/6/2017)
Improved recovery process
Support for player markets, support for empty market messages
IOddsFeed - added Closed event, invoked when feed is forcebly closed
Added property Name to ICompetion
Exposed raw xml message on all feed message received events
Fix: %server specifier template loaded from competitor profile
Fix: stateful messages not dispatched when connecting to replay server
Fix: updating cache for SportEventStatus on feed messages (8/4/2017)
Fixed bug when feed recovery gets interrupted when lasting longer then expected
Empty tournament names now allowed
Added 'maxRecoveryTime' to the config section (7/31/2017)
CashoutProvider enabled on feed instance
Season - fixed multilanguage name support
Messages for disabled producers are no longer dispatched
Fixed clearing SportEventStatusCache on bet_settlement message
Fixed that on disconnection / on productdown event is raised correctly when no message arrives within specified timeout

Version contains breaking changes:
Product enumeration has been replaced with IProducer interface in order to ensure automatic support of new producers
Some functionality previously exposed on the IOddsConfiguration interface has been moved to new IProducerManager interface. (6/15/2017)
All SportEventStatus properties available in Properties list
Ensured thread safety in SportDataCache when new Tournament data is added/updated
Updated how SportEvent or Tournament Season data is obtained and available for users
Product code for LCoO changed to 'pre' (6/1/2017)
Fixed deserializing of API messages for race details
Changed how sport event status is obtained internally, made available via ISportDataProvider
Added auto-close to feed when recovery request can not be made (5/29/2017)
Changed support for wild card validity market mapping validity attributes - now the format "specifer_name~*.xx" is supported
Fixed a bug in session message handling which caused some of the messages were not dispatched to the user
Modified handling of error response codes returned by the recovery endpoints (5/23/2017)
Added support for x.0, x.25, x.5, x.75 market mapping validity attribute
Added support for (%player) name template in market name descriptions (4/21/2017)
Breaking Changes:
IMarketWithOdds.IsFavourite renamed to IMarketWithOdds.IsFavorite
IMarketWithOdds.Outcomes renamed to IMarketWithOdds.OutcomeOdds
IMarketWithSettlement.Outcomes renamed to IMarketWithSettlement.OutcomeSettlements
ISportEvent interface renamed to ICompetition
ISportEntity interface renamed to ISportEvent
IOddsChange.BetStopReason: Type changed from enum to INamedValue
IOddsChange.BettingStatus: Type changed from enum to INamedValue
Introduced IOddsFeedConfigurationBuilder which must now be used in order to create IOddsFeedConfiguration
RecoveryRequestIssuer property on the IOddsFeed renamed and its type changed

New Features:
Improvements and bug fixes to recovery process
Initial support for upcoming products BetPal and PremiumCricket added
Enforcing that timestamp for recovery is not more than 72 hours in the past or in the future
Added support for connection to custom message broker and RESTful api
Optimization of resources used by the connection to the message broker (4/19/2017)
Support for flexible score markets
Added support for outcomes with composite ids
Void reason added to betsettlement messages
Market status property added to betstop messages
Minor fixed how recovery are called internaly (3/29/2017)
Fixed calling groups on Tournament when no groups are present
Fixed internal mapping for Odds messages without markets (3/21/2017)
Removed UnalteredEvents event and message
Added encoding UTF-8 for logging in log4net.sdk.config (check DemoProject)
Fixed internal message processing pipeline for multi-session scenario
Implemented support for simple math expressions in market names
Removed Group from SportEvent
SportDataProvider - fixed retrieving TournamentSchedule
Made some properties of the REST entities translatable due to changes in the feed (2/6/2017)
Updated fixture changes (added References to SportEvent and Competitor object)
Added event statuses
Added MatchStatus in SportEventStatus object
Added support for Replay Server
Added support for Market and Outcomes mappings
Improved how recoveries are made (user can specify when last message was processed)
New DemoProject examples added
Performance improvements (11/22/2016)
SDK available via NuGet packet manager.
SDK merged into a single assembly which only exposes types required by the user.
IsMostBalanced property on IMarketWithOdds interface renamed to IsFavourite.
SupersededBy property added to IBetCancel interface.
Additional market statuses added.