public Adapter(ISettings settings, IServiceFacade udapiServiceFacade, IAdapterPlugin platformConnector, IStreamListenerManager listenersManager)
        {
            _listenersManager = listenersManager;

            Settings          = settings;
            UDAPIService      = udapiServiceFacade;
            PlatformConnector = platformConnector;

            var statemanager = new StateManager(settings, platformConnector);

            StateManager = statemanager;
            StateProviderProxy.Init(statemanager);

            listenersManager.StateManager = statemanager;

            if (settings.StatsEnabled)
            {
                StatsManager.Configure();
            }

            // we just need the initialisation
            new SuspensionManager(statemanager, PlatformConnector);

            platformConnector.Initialise();
            statemanager.AddRules(platformConnector.MarketRules);


            ThreadPool.SetMinThreads(500, 500);

            _sports = new List <string>();

            _stats = StatsManager.Instance["adapter.core"].GetHandle();

            PopuplateAdapterVersionInfo();
        }
        public virtual void CreateStreamListener(IResourceFacade resource, IAdapterPlugin platformConnector)
        {
            bool creationWasLocked = false;

            try
            {
                _logger.InfoFormat("Attempting to create a Listener for sport={0} and {1}", resource.Sport, resource);

                if (_listeners.ContainsKey(resource.Id))
                {
                    _logger.InfoFormat("Stream listener already exists for {0}, skipping creation", resource);
                    return;
                }

                // this is king of lock that prevent to create 2 listener for  the same resource.Id
                if (LockCreatingListener(resource))
                {
                    return;
                }
                creationWasLocked = true;

                var listener = CreateStreamListenerObject(resource, platformConnector, EventState, StateManager);

                var isStarted = listener.Start();

                if (!isStarted)
                {
                    _logger.WarnFormat("Couldn't start stream listener for {0}", resource);
                    listener.Dispose();
                    DisposedStreamListener(listener);
                    return;
                }

                var added = _listeners.TryAdd(resource.Id, listener);
                if (!added)
                {
                    _logger.WarnFormat("Failed to add stream listener - most likely it has been already added {0} - this will be disposed now", resource);
                    listener.Dispose();
                    DisposedStreamListener(listener);
                    return;
                }

                OnStreamCreated(resource.Id);

                (listener as StreamListener).OnDisconnected += OnStreamDisconnected;

                _logger.InfoFormat("Listener created for {0}", resource);
            }
            finally
            {
                if (creationWasLocked)
                {
                    ReleaseCreatingListener(resource);
                }
                ReleaseProcessing(resource.Id);
                _logger.DebugFormat("Finished processing fixture {0}", resource);
                _logger.DebugFormat("Saving event state after processing fixture {0}", resource);
                SaveEventState();
            }
        }
Exemple #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="settings"></param>
        /// <param name="streamListenerManagerActorContext"></param>
        /// <param name="adapterPlugin"></param>
        /// <param name="stateManager"></param>
        /// <param name="suspensionManager"></param>
        /// <param name="streamHealthCheckValidation"></param>
        /// <param name="fixtureValidation"></param>
        public StreamListenerBuilderActor(
            ISettings settings,
            IActorContext streamListenerManagerActorContext,
            IAdapterPlugin adapterPlugin,
            IStateManager stateManager,
            ISuspensionManager suspensionManager,
            IStreamHealthCheckValidation streamHealthCheckValidation,
            IFixtureValidation fixtureValidation)
        {
            _settings = settings ?? throw new ArgumentNullException(nameof(settings));
            _streamListenerManagerActorContext =
                streamListenerManagerActorContext ??
                throw new ArgumentNullException(nameof(streamListenerManagerActorContext));
            _adapterPlugin               = adapterPlugin ?? throw new ArgumentNullException(nameof(adapterPlugin));
            _stateManager                = stateManager ?? throw new ArgumentNullException(nameof(stateManager));
            _suspensionManager           = suspensionManager ?? throw new ArgumentNullException(nameof(suspensionManager));
            _streamHealthCheckValidation = streamHealthCheckValidation ?? throw new ArgumentNullException(nameof(streamHealthCheckValidation));
            _fixtureValidation           = fixtureValidation ?? throw new ArgumentNullException(nameof(fixtureValidation));

            Context.System.Scheduler.ScheduleTellRepeatedly(
                CheckStateIntervalInMilliseconds,
                CheckStateIntervalInMilliseconds,
                Self,
                new CheckStreamListenerBuilderActorStateMsg(),
                Self);

            Active();
        }
        public Adapter(ISettings settings, IServiceFacade udapiServiceFacade, IAdapterPlugin platformConnector, IStreamListenerManager listenersManager)
        {
            _listenersManager = listenersManager;
            
            Settings = settings;
            UDAPIService = udapiServiceFacade;
            PlatformConnector = platformConnector;

            var statemanager = new StateManager(settings,platformConnector);
            StateManager = statemanager;
            StateProviderProxy.Init(statemanager);

            listenersManager.StateManager = statemanager;

            if (settings.StatsEnabled)
                StatsManager.Configure();

            // we just need the initialisation
            new SuspensionManager(statemanager, PlatformConnector);

            platformConnector.Initialise();
            statemanager.AddRules(platformConnector.MarketRules);


            ThreadPool.SetMinThreads(500, 500);
            
            _sports = new List<string>();
            
            _stats = StatsManager.Instance["adapter.core"].GetHandle();

            PopuplateAdapterVersionInfo();
        }
Exemple #5
0
        public Adapter(
            ISettings settings,
            IServiceFacade udapiServiceFacade,
            IAdapterPlugin platformConnector,
            IStateManager stateManager,
            IStateProvider stateProvider,
            ISuspensionManager suspensionManager,
            IStreamHealthCheckValidation streamHealthCheckValidation,
            IFixtureValidation fixtureValidation)
        {
            _settings                    = settings ?? throw new ArgumentNullException(nameof(settings));
            _udapiServiceFacade          = udapiServiceFacade ?? throw new ArgumentNullException(nameof(udapiServiceFacade));
            _platformConnector           = platformConnector ?? throw new ArgumentNullException(nameof(platformConnector));
            _stateManager                = stateManager ?? throw new ArgumentNullException(nameof(stateManager));
            _suspensionManager           = suspensionManager ?? throw new ArgumentNullException(nameof(suspensionManager));
            _streamHealthCheckValidation = streamHealthCheckValidation ?? throw new ArgumentNullException(nameof(streamHealthCheckValidation));
            _fixtureValidation           = fixtureValidation ?? throw new ArgumentNullException(nameof(fixtureValidation));

            StateProviderProxy.Init(stateProvider);

            if (settings.StatsEnabled)
            {
                StatsManager.Configure();
            }

            platformConnector.Initialise();
            stateManager.AddRules(platformConnector.MarketRules);

            ThreadPool.SetMinThreads(500, 500);

            _stats = StatsManager.Instance["adapter.core"].GetHandle();

            PopuplateAdapterVersionInfo();
        }
Exemple #6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="settings"></param>
        /// <param name="udApiService"></param>
        /// <param name="adapterPlugin"></param>
        /// <param name="stateManager"></param>
        /// <param name="suspensionManager"></param>
        /// <param name="streamHealthCheckValidation"></param>
        /// <param name="fixtureValidation"></param>
        public static void Init(
            ISettings settings,
            IServiceFacade udApiService,
            IAdapterPlugin adapterPlugin,
            IStateManager stateManager,
            ISuspensionManager suspensionManager,
            IStreamHealthCheckValidation streamHealthCheckValidation,
            IFixtureValidation fixtureValidation)
        {
            _actorSystem = ActorSystem.Create("AdapterSystem");

            var fileStoreProvider = new FileStoreProvider(settings.StateProviderPath);

            CreateFixtureStateActor(settings, fileStoreProvider);
            CreateStreamListenerManagerActor(settings, adapterPlugin, stateManager, suspensionManager, streamHealthCheckValidation, fixtureValidation);
            CreateSportProcessorRouterActor(settings, udApiService);
            CreateSportsProcessorActor(settings, udApiService);

            // Setup an actor that will handle deadletter type messages
            var deadletterWatchMonitorProps = Props.Create(() => new AdapterDeadletterMonitorActor());
            var deadletterWatchActorRef     = _actorSystem.ActorOf(deadletterWatchMonitorProps, "AdapterDeadletterMonitorActor");

            // subscribe to the event stream for messages of type "DeadLetter"
            _actorSystem.EventStream.Subscribe(deadletterWatchActorRef, typeof(DeadLetter));
        }
        public StreamListener(IResourceFacade resource, IAdapterPlugin platformConnector, IEventState eventState, IStateManager stateManager, ISettings settings)
        {
            if (resource == null)
            {
                throw new ArgumentException("Resource information cannot be null");
            }

            if (resource.Content == null)
            {
                throw new Exception("Resource does not contain any content");
            }


            _logger.DebugFormat("Instantiating listener for {0} with sequence={1}", resource, resource.Content.Sequence);

            _lockTimeout       = settings.ProcessingLockTimeOutInSecs;
            _resource          = resource;
            _platformConnector = platformConnector;
            _eventState        = eventState;
            _stateManager      = stateManager;
            _settings          = settings;

            _currentSequence = resource.Content.Sequence;
            _lastSequenceProcessedInSnapshot = -1;

            _hasRecoveredFromError     = true;
            _isFirstSnapshotProcessed  = false;
            _isProcessingFirstSnapshot = false;
            _performingDelayedStop     = false;

            _marketsRuleManager = stateManager.CreateNewMarketRuleManager(resource.Id);

            FixtureId = resource.Id;
            Sport     = resource.Sport;
            SequenceOnStreamingAvailable = _currentSequence;

            IsStreaming  = false;
            IsConnecting = false;
            IsDisposing  = false;
            IsErrored    = false;
            IsIgnored    = false;
            IsStopping   = false;

            var fixtureState = _eventState.GetFixtureState(resource.Id);

            IsFixtureEnded   = fixtureState != null ? fixtureState.MatchStatus == MatchStatus.MatchOver : _resource.IsMatchOver;
            IsFixtureSetup   = (_resource.MatchStatus == MatchStatus.Setup || _resource.MatchStatus == MatchStatus.Ready);
            IsFixtureDeleted = false;
            IsInPlay         = fixtureState != null ? fixtureState.MatchStatus == MatchStatus.InRunning : _resource.MatchStatus == MatchStatus.InRunning;
            _currentEpoch    = fixtureState != null ? fixtureState.Epoch : -1;

            _Stats = StatsManager.Instance[string.Concat("adapter.core.sport.", resource.Sport)].GetHandle();

            SetupListener();
            _logger.DebugFormat("Listener instantiated for {0}", resource);
        }
        public StreamListener(IResourceFacade resource, IAdapterPlugin platformConnector, IEventState eventState, IStateManager stateManager,ISettings settings)
        {
            if (resource == null)
                throw new ArgumentException("Resource information cannot be null");

            if (resource.Content == null)
                throw new Exception("Resource does not contain any content");


            _logger.DebugFormat("Instantiating listener for {0} with sequence={1}", resource, resource.Content.Sequence);

            _lockTimeout = settings.ProcessingLockTimeOutInSecs;
            _resource = resource;
            _platformConnector = platformConnector;
            _eventState = eventState;
            _stateManager = stateManager;
            _settings = settings;

            _currentSequence = resource.Content.Sequence;
            _lastSequenceProcessedInSnapshot = -1;
            
            _hasRecoveredFromError = true;
            _isFirstSnapshotProcessed = false;
            _isProcessingFirstSnapshot = false;
            _performingDelayedStop = false;

            _marketsRuleManager = stateManager.CreateNewMarketRuleManager(resource.Id);

            FixtureId = resource.Id;
            Sport = resource.Sport;
            SequenceOnStreamingAvailable = _currentSequence;

            IsStreaming = false;
            IsConnecting = false;
            IsDisposing = false;
            IsErrored = false;
            IsIgnored = false;
            IsStopping = false;

            var fixtureState = _eventState.GetFixtureState(resource.Id);

            IsFixtureEnded = fixtureState != null ? fixtureState.MatchStatus == MatchStatus.MatchOver : _resource.IsMatchOver;
            IsFixtureSetup = (_resource.MatchStatus == MatchStatus.Setup || _resource.MatchStatus == MatchStatus.Ready);
            IsFixtureDeleted = false;
            IsInPlay = fixtureState != null ? fixtureState.MatchStatus == MatchStatus.InRunning : _resource.MatchStatus == MatchStatus.InRunning;
            _currentEpoch = fixtureState != null ? fixtureState.Epoch : -1;
            
            _Stats = StatsManager.Instance[string.Concat("adapter.core.sport.", resource.Sport)].GetHandle();

            SetupListener();
            _logger.DebugFormat("Listener instantiated for {0}", resource);

        }
        public override void CreateStreamListener(IResourceFacade resource, IAdapterPlugin platformConnector)
        {
            base.CreateStreamListener(resource, platformConnector);
            var listener = GetStreamListenerObject(resource.Id);

            UpdateStateFromStreamListener(listener);
            var fixtureOverview = GetFixtureOverview(listener.FixtureId) as FixtureOverview;

            PublishDelta(fixtureOverview);

            _logger.DebugFormat("Created new StreamListener for {0}", resource);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="settings"></param>
        /// <param name="adapterPlugin"></param>
        /// <param name="stateManager"></param>
        /// <param name="suspensionManager"></param>
        /// <param name="streamHealthCheckValidation"></param>
        /// <param name="fixtureValidation"></param>
        public StreamListenerManagerActor(
            ISettings settings,
            IAdapterPlugin adapterPlugin,
            IStateManager stateManager,
            ISuspensionManager suspensionManager,
            IStreamHealthCheckValidation streamHealthCheckValidation,
            IFixtureValidation fixtureValidation)
        {
            _settings = settings ?? throw new ArgumentNullException(nameof(settings));
            if (adapterPlugin == null)
            {
                throw new ArgumentNullException(nameof(adapterPlugin));
            }
            if (stateManager == null)
            {
                throw new ArgumentNullException(nameof(stateManager));
            }
            if (suspensionManager == null)
            {
                throw new ArgumentNullException(nameof(suspensionManager));
            }

            _shouldSendProcessSportsMessage = true;

            _streamListenerBuilderActorRef =
                Context.ActorOf(Props.Create(() =>
                                             new StreamListenerBuilderActor(
                                                 settings,
                                                 Context,
                                                 adapterPlugin,
                                                 stateManager,
                                                 suspensionManager,
                                                 streamHealthCheckValidation,
                                                 fixtureValidation)),
                                StreamListenerBuilderActor.ActorName);

            Receive <ProcessResourceMsg>(o => ProcessResourceMsgHandler(o));
            Receive <StreamConnectedMsg>(o => StreamConnectedMsgHandler(o));
            Receive <StreamDisconnectedMsg>(o => StreamDisconnectedMsgHandler(o));
            Receive <StreamListenerStoppedMsg>(o => StreamListenerStoppedMsgHandler(o));
            Receive <StartStreamingNotRespondingMsg>(o => StopStreamListenerChildActor(o.FixtureId));
            Receive <StreamListenerInitializedMsg>(o => StreamListenerInitializedMsgHandler(o));
            Receive <StreamListenerCreationFailedMsg>(o => StreamListenerCreationFailedMsgHandler(o));
            Receive <StreamListenerCreationCancelledMsg>(o => StreamListenerCreationCancelledMsgHandler(o));
            Receive <Terminated>(o => TerminatedHandler(o));
            Receive <ResetSendProcessSportsMsg>(o => ResetSendProcessSportsMsgHandler(o));
            Receive <RetrieveAndProcessSnapshotMsg>(o => RetrieveAndProcessSnapshotMsgHandler(o));
            Receive <RestartStreamListenerMsg>(o => RestartStreamListenerMsgHandler(o));
            Receive <ClearFixtureStateMsg>(o => ClearFixtureStateMsgHandler(o));
        }
Exemple #11
0
        public virtual void CreateStreamListener(IResourceFacade resource, IAdapterPlugin platformConnector)
        {
            try
            {
                _logger.InfoFormat("Attempting to create a Listener for sport={0} and {1}", resource.Sport, resource);

                if (_listeners.ContainsKey(resource.Id))
                {
                    _logger.InfoFormat("Stream listener already exists for {0}, skipping creation", resource);
                    return;
                }

                var listener = CreateStreamListenerObject(resource, platformConnector, EventState, StateManager);

                var isStarted = listener.Start();

                if (!isStarted)
                {
                    _logger.WarnFormat("Couldn't start stream listener for {0}", resource);
                    listener.Dispose();
                    DisposedStreamListener(listener);
                    return;
                }

                var added = _listeners.TryAdd(resource.Id, listener);
                if (!added)
                {
                    _logger.WarnFormat("Failed to add stream listener - most likely it has been already added {0} - this will be disposed now", resource);
                    listener.Dispose();
                    DisposedStreamListener(listener);
                    return;
                }

                OnStreamCreated(resource.Id);

                (listener as StreamListener).OnDisconnected += OnStreamDisconnected;

                _logger.InfoFormat("Listener created for {0}", resource);
            }
            finally
            {
                MarkResourceAsProcessable(resource);

                SaveEventState();
                _logger.DebugFormat("Finished processing fixture {0}", resource);
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="settings"></param>
        /// <param name="platformConnector"></param>
        /// <param name="resource"></param>
        /// <param name="stateManager"></param>
        /// <param name="suspensionManager"></param>
        /// <param name="streamHealthCheckValidation"></param>
        /// <param name="fixtureValidation"></param>
        public StreamListenerActor(
            ISettings settings,
            IAdapterPlugin platformConnector,
            IResourceFacade resource,
            IStateManager stateManager,
            ISuspensionManager suspensionManager,
            IStreamHealthCheckValidation streamHealthCheckValidation,
            IFixtureValidation fixtureValidation)
        {
            try
            {
                _isInitializing = true;

                _settings                    = settings ?? throw new ArgumentNullException(nameof(settings));
                _platformConnector           = platformConnector ?? throw new ArgumentNullException(nameof(platformConnector));
                _resource                    = resource ?? throw new ArgumentNullException(nameof(resource));
                _stateManager                = stateManager ?? throw new ArgumentNullException(nameof(stateManager));
                _suspensionManager           = suspensionManager ?? throw new ArgumentNullException(nameof(suspensionManager));
                _marketsRuleManager          = _stateManager.CreateNewMarketRuleManager(resource.Id);
                _streamHealthCheckValidation = streamHealthCheckValidation ?? throw new ArgumentNullException(nameof(streamHealthCheckValidation));
                _fixtureValidation           = fixtureValidation ?? throw new ArgumentNullException(nameof(fixtureValidation));
                _fixtureId                   = _resource.Id;
                _resourceActor               = Context.ActorOf(
                    Props.Create(() => new ResourceActor(Self, _resource)),
                    ResourceActor.ActorName);
                _streamHealthCheckActor = Context.ActorOf(
                    Props.Create(() => new StreamHealthCheckActor(_resource, _settings, _streamHealthCheckValidation)),
                    StreamHealthCheckActor.ActorName);
                _streamStatsActor = Context.ActorOf(
                    Props.Create(() => new StreamStatsActor()),
                    StreamStatsActor.ActorName);

                Context.Parent.Tell(new NewStreamListenerActorMsg {
                    FixtureId = _resource.Id, Sport = _resource.Sport
                });

                Initialize();
            }
            catch (Exception ex)
            {
                _logger.Error(
                    $"Stream Listener instantiation failed for {_resource} - exception - {ex}");
                _erroredException = ex;
                Become(Errored);
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="settings"></param>
        /// <param name="udApiService"></param>
        /// <param name="adapterPlugin"></param>
        /// <param name="stateManager"></param>
        /// <param name="suspensionManager"></param>
        /// <param name="streamHealthCheckValidation"></param>
        /// <param name="fixtureValidation"></param>
        public static void Init(
            ISettings settings,
            IServiceFacade udApiService,
            IAdapterPlugin adapterPlugin,
            IStateManager stateManager,
            ISuspensionManager suspensionManager,
            IStreamHealthCheckValidation streamHealthCheckValidation,
            IFixtureValidation fixtureValidation)
        {
            _actorSystem = ActorSystem.Create("AdapterSystem");

            var fileStoreProvider = new FileStoreProvider(settings.StateProviderPath);

            _fixtureStateActor = ActorSystem.ActorOf(
                Props.Create(() =>
                             new FixtureStateActor(
                                 settings,
                                 fileStoreProvider)),
                FixtureStateActor.ActorName);

            _streamListenerManagerActor = ActorSystem.ActorOf(
                Props.Create(() =>
                             new StreamListenerManagerActor(
                                 settings,
                                 adapterPlugin,
                                 stateManager,
                                 suspensionManager,
                                 streamHealthCheckValidation,
                                 fixtureValidation)),
                StreamListenerManagerActor.ActorName);

            _sportProcessorRouterActor = ActorSystem.ActorOf(
                Props.Create(() => new SportProcessorRouterActor(udApiService))
                .WithRouter(new SmallestMailboxPool(settings.FixtureCreationConcurrency)),
                SportProcessorRouterActor.ActorName);

            _sportsProcessorActor = ActorSystem.ActorOf(
                Props.Create(() =>
                             new SportsProcessorActor(
                                 settings,
                                 udApiService,
                                 _sportProcessorRouterActor)),
                SportsProcessorActor.ActorName);
        }
        internal SuspensionManager(IStateProvider stateProvider, IAdapterPlugin plugin)
        {
            if (stateProvider == null)
                throw new ArgumentNullException("stateProvider");

            if (plugin == null)
                throw new AggregateException("plugin");

            _stateProvider = stateProvider;
            _plugin = plugin;

            BuildDefaultStrategies();

            _disposing = SuspendFixtureStrategy;
            _error = SuspendFixtureStrategy;
            _disconnected = SuspendFixtureStrategy;
            _default = SuspendFixtureStrategy;
            _fixtureDeleted = SuspendFixtureAndSetMatchStatusDeleted;
        }
        public SuspensionManager(IStateProvider stateProvider, IAdapterPlugin plugin)
        {
            _stateProvider = stateProvider ?? throw new ArgumentNullException(nameof(stateProvider));
            _plugin        = plugin ?? throw new AggregateException(nameof(plugin));

            var stateManager = _stateProvider as StateManager;

            if (stateManager != null)
            {
                stateManager.SuspensionManager = this;
            }

            BuildDefaultStrategies();

            _disposing      = SuspendFixtureStrategy;
            _error          = SuspendFixtureStrategy;
            _disconnected   = SuspendFixtureStrategy;
            _default        = SuspendFixtureStrategy;
            _fixtureDeleted = SuspendFixtureAndSetMatchStatusDeleted;
        }
Exemple #16
0
        private void Compose()
        {
            _logger.Info("Adapter Service is looking for a plugin");
            CompositionContainer container = null;

            try
            {
                string codebase = AppDomain.CurrentDomain.BaseDirectory;

                var pluginAssembly = ConfigurationManager.AppSettings["pluginAssembly"];
                var catalog        = new SafeDirectoryCatalog(codebase, pluginAssembly);
                container = new CompositionContainer(catalog);
                container.ComposeParts(this);
                PlatformConnectorInstance = PlatformConnector;
            }
            catch (CompositionException ex)
            {
                foreach (var error in ex.Errors)
                {
                    _logger.Fatal("Error when loading plugin", error.Exception);
                }
            }
            catch (ReflectionTypeLoadException ex)
            {
                foreach (var error in ex.LoaderExceptions)
                {
                    _logger.Fatal("Error when searching for plugin", error);
                }
            }
            catch (Exception ex)
            {
                _logger.Fatal("Error when loading plugin", ex);
            }
            finally
            {
                if (container != null)
                {
                    container.Dispose();
                }
            }
        }
Exemple #17
0
 private static void CreateStreamListenerManagerActor(ISettings settings, IAdapterPlugin adapterPlugin,
                                                      IStateManager stateManager, ISuspensionManager suspensionManager,
                                                      IStreamHealthCheckValidation streamHealthCheckValidation, IFixtureValidation fixtureValidation)
 {
     try
     {
         _streamListenerManagerActor = ActorSystem.ActorOf(
             Props.Create(() =>
                          new StreamListenerManagerActor(
                              settings,
                              adapterPlugin,
                              stateManager,
                              suspensionManager,
                              streamHealthCheckValidation,
                              fixtureValidation)),
             StreamListenerManagerActor.ActorName);
     }
     catch (Exception e)
     {
         _logger.Fatal($"Error creating StreamListenerManagerActor {e}");
         throw;
     }
 }
        internal SuspensionManager(IStateProvider stateProvider, IAdapterPlugin plugin)
        {
            if (stateProvider == null)
            {
                throw new ArgumentNullException("stateProvider");
            }

            if (plugin == null)
            {
                throw new AggregateException("plugin");
            }

            _stateProvider = stateProvider;
            _plugin        = plugin;

            BuildDefaultStrategies();

            _disposing      = SuspendFixtureStrategy;
            _error          = SuspendFixtureStrategy;
            _disconnected   = SuspendFixtureStrategy;
            _default        = SuspendFixtureStrategy;
            _fixtureDeleted = SuspendFixtureAndSetMatchStatusDeleted;
        }
Exemple #19
0
        public StateManager(ISettings settings, IAdapterPlugin plugin)
        {
            if (settings == null)
            {
                throw new ArgumentNullException("settings", "ISettings cannot be null");
            }

            _persistanceLayer = new CachedObjectStoreWithPersistance <IUpdatableMarketStateCollection>(
                new BinaryStoreProvider <IUpdatableMarketStateCollection>(settings.MarketFiltersDirectory, "FilteredMarkets-{0}.bin"),
                "MarketFilters", settings.CacheExpiryInMins * 60);

            _pluginPersistanceLayer = new CachedObjectStoreWithPersistance <IPluginFixtureState>(
                new BinaryStoreProvider <IPluginFixtureState>(settings.MarketFiltersDirectory, "PluginStore-{0}.bin"),
                "MarketFilters", settings.CacheExpiryInMins * 60);

            _rulesManagers = new ConcurrentDictionary <string, MarketRulesManager>();

            Plugin            = plugin;
            SuspensionManager = new SuspensionManager(this, plugin);

            _Rules = new HashSet <IMarketRule>
            {
                VoidUnSettledMarket.Instance,
                DeletedMarketsRule.Instance,
                InactiveMarketsFilteringRule.Instance
            };

            if (settings.DeltaRuleEnabled)
            {
                _Rules.Add(DeltaRule.Instance);
            }

            foreach (var rule in _Rules)
            {
                _logger.DebugFormat("Rule {0} correctly loaded", rule.Name);
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="settings"></param>
        /// <param name="adapterPlugin"></param>
        /// <param name="stateManager"></param>
        /// <param name="suspensionManager"></param>
        /// <param name="streamHealthCheckValidation"></param>
        /// <param name="fixtureValidation"></param>
        public StreamListenerManagerActor(
            ISettings settings,
            IAdapterPlugin adapterPlugin,
            IStateManager stateManager,
            ISuspensionManager suspensionManager,
            IStreamHealthCheckValidation streamHealthCheckValidation,
            IFixtureValidation fixtureValidation)
        {
            _settings = settings ?? throw new ArgumentNullException(nameof(settings));
            if (adapterPlugin == null)
            {
                throw new ArgumentNullException(nameof(adapterPlugin));
            }
            if (stateManager == null)
            {
                throw new ArgumentNullException(nameof(stateManager));
            }
            if (suspensionManager == null)
            {
                throw new ArgumentNullException(nameof(suspensionManager));
            }

            _shouldSendProcessSportsMessage = true;

            _streamListenerBuilderActorRef =
                Context.ActorOf(Props.Create(() =>
                                             new StreamListenerBuilderActor(
                                                 settings,
                                                 Context,
                                                 adapterPlugin,
                                                 stateManager,
                                                 suspensionManager,
                                                 streamHealthCheckValidation,
                                                 fixtureValidation)),
                                StreamListenerBuilderActor.ActorName);

            _streamListeners = new Dictionary <string, Dictionary <string, StreamListenerState> >();

            _logPublishedFixturesCountsMsgSchedule = Context.System.Scheduler.ScheduleTellRepeatedlyCancelable(
                TimeSpan.FromSeconds(30),
                TimeSpan.FromSeconds(30),
                Self,
                new LogPublishedFixturesCountsMsg(),
                Self);

            Receive <RegisterDelayMsg>(o => RegisterDelayMsgHandler(o));
            Receive <ProcessResourceMsg>(o => ProcessResourceMsgHandler(o));
            Receive <StreamConnectedMsg>(o => StreamConnectedMsgHandler(o));
            Receive <StreamDisconnectedMsg>(o => StreamDisconnectedMsgHandler(o));
            Receive <StreamListenerStoppedMsg>(o => StreamListenerStoppedMsgHandler(o));
            Receive <StartStreamingNotRespondingMsg>(o => StopStreamListenerChildActor(o.FixtureId));
            Receive <StreamListenerInitializedMsg>(o => StreamListenerInitializedMsgHandler(o));
            Receive <StreamListenerCreationFailedMsg>(o => StreamListenerCreationFailedMsgHandler(o));
            Receive <StreamListenerCreationCancelledMsg>(o => StreamListenerCreationCancelledMsgHandler(o));
            Receive <Terminated>(o => TerminatedHandler(o));
            Receive <ResetSendProcessSportsMsg>(o => ResetSendProcessSportsMsgHandler(o));
            Receive <RetrieveAndProcessSnapshotMsg>(o => RetrieveAndProcessSnapshotMsgHandler(o));
            Receive <RestartStreamListenerMsg>(o => RestartStreamListenerMsgHandler(o));
            Receive <ClearFixtureStateMsg>(o => ClearFixtureStateMsgHandler(o));
            Receive <NewStreamListenerActorMsg>(o => NewStreamListenerActorMsgHandler(o));
            Receive <StreamListenerActorStateChangedMsg>(o => StreamListenerActorStateChangedMsgHandler(o));
            Receive <LogPublishedFixturesCountsMsg>(o => LogPublishedFixturesCountsMsgHandler(o));
            Receive <RegisterSdkErrorActorMessage>(a => RegisterSdkErrorActor());
            Receive <SdkErrorMessage>(a => FaultControllerActorOnErrorOcured(a));
            Receive <PathMessage>(a => { _logger.Info("PathMessage delivered"); });


            Context.System.Scheduler.ScheduleTellRepeatedly(new TimeSpan(0, 1, 0), new TimeSpan(0, 1, 0),
                                                            Self, new RegisterSdkErrorActorMessage(), Self);
        }
        public override void CreateStreamListener(IResourceFacade resource, IAdapterPlugin platformConnector)
        {
            base.CreateStreamListener(resource, platformConnector);
            var listener = GetStreamListenerObject(resource.Id);

            UpdateStateFromStreamListener(listener);
            var fixtureOverview = GetFixtureOverview(listener.FixtureId) as FixtureOverview;

            PublishDelta(fixtureOverview);

            _logger.DebugFormat("Created new StreamListener for {0}", resource);
        }
        protected override IListener CreateStreamListenerObject(IResourceFacade resource, IAdapterPlugin platformConnector, IEventState eventState,
            IStateManager stateManager)
        {
            var streamListener = base.CreateStreamListenerObject(resource, platformConnector, eventState, stateManager);

            var streamListenerObject = streamListener as StreamListener;
            if (streamListenerObject != null)
            {
                streamListenerObject.OnConnected += StreamListenerConnected;
                streamListenerObject.OnDisconnected += StreamListenerDisconnected;
                streamListenerObject.OnError += StreamListenerErrored;
                streamListenerObject.OnFlagsChanged += StreamListenerFlagsChanged;
                streamListenerObject.OnBeginSnapshotProcessing += StreamListenerSnapshot;
                streamListenerObject.OnFinishedSnapshotProcessing += StreamListenerFinishedProcessingUpdate;
                streamListenerObject.OnBeginStreamUpdateProcessing += StreamListenerBeginStreamUpdate;
                streamListenerObject.OnFinishedStreamUpdateProcessing += StreamListenerFinishedProcessingUpdate;
                streamListenerObject.OnSuspend += StreamListenerSuspended;
                streamListenerObject.OnStop += StreamListenerStop;
            }
            
            return streamListener;
        }
        public virtual void CreateStreamListener(IResourceFacade resource, IAdapterPlugin platformConnector)
        {
            try
            {
                _logger.InfoFormat("Attempting to create a Listener for sport={0} and {1}", resource.Sport, resource);

                if (_listeners.ContainsKey(resource.Id))
                {
                    _logger.InfoFormat("Stream listener already exists for {0}, skipping creation",resource);
                    return;
                }

                var listener = CreateStreamListenerObject(resource, platformConnector, EventState, StateManager);

                var isStarted = listener.Start();

                if (!isStarted)
                {
                    _logger.WarnFormat("Couldn't start stream listener for {0}", resource);
                    listener.Dispose();
                    DisposedStreamListener(listener);
                    return;
                }

                var added = _listeners.TryAdd(resource.Id, listener);
                if (!added)
                {
                    _logger.WarnFormat("Failed to add stream listener - most likely it has been already added {0} - this will be disposed now",resource);
                    listener.Dispose();
                    DisposedStreamListener(listener);
                    return;
                }

                OnStreamCreated(resource.Id);

                (listener as StreamListener).OnDisconnected += OnStreamDisconnected;

                _logger.InfoFormat("Listener created for {0}", resource);
            }
            finally
            {
                MarkResourceAsProcessable(resource);

                SaveEventState();
                _logger.DebugFormat("Finished processing fixture {0}", resource);
            }
        }
 protected virtual IListener CreateStreamListenerObject(IResourceFacade resource, IAdapterPlugin platformConnector, IEventState eventState, IStateManager stateManager)
 {
     return new StreamListener(resource, platformConnector, eventState, stateManager,_settings);
 }
Exemple #25
0
 public BootStrapper(IAdapterPlugin platformConnector)
 {
     _platformConnector = platformConnector ?? throw new ArgumentNullException(nameof(platformConnector));
 }
 protected virtual IListener CreateStreamListenerObject(IResourceFacade resource, IAdapterPlugin platformConnector, IEventState eventState, IStateManager stateManager)
 {
     return(new StreamListener(resource, platformConnector, eventState, stateManager, _settings));
 }
        protected override IListener CreateStreamListenerObject(IResourceFacade resource, IAdapterPlugin platformConnector, IEventState eventState,
                                                                IStateManager stateManager)
        {
            var streamListener = base.CreateStreamListenerObject(resource, platformConnector, eventState, stateManager);

            var streamListenerObject = streamListener as StreamListener;

            if (streamListenerObject != null)
            {
                streamListenerObject.OnConnected                      += StreamListenerConnected;
                streamListenerObject.OnDisconnected                   += StreamListenerDisconnected;
                streamListenerObject.OnError                          += StreamListenerErrored;
                streamListenerObject.OnFlagsChanged                   += StreamListenerFlagsChanged;
                streamListenerObject.OnBeginSnapshotProcessing        += StreamListenerSnapshot;
                streamListenerObject.OnFinishedSnapshotProcessing     += StreamListenerFinishedProcessingUpdate;
                streamListenerObject.OnBeginStreamUpdateProcessing    += StreamListenerBeginStreamUpdate;
                streamListenerObject.OnFinishedStreamUpdateProcessing += StreamListenerFinishedProcessingUpdate;
                streamListenerObject.OnSuspend                        += StreamListenerSuspended;
                streamListenerObject.OnStop += StreamListenerStop;
            }

            return(streamListener);
        }