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