private void StopStreamListenerChildActor(string fixtureId) { IActorRef streamListenerActor = Context.Child(StreamListenerActor.GetName(fixtureId)); if (!streamListenerActor.IsNobody()) { Context.Stop(streamListenerActor); } }
private void RestartStreamListenerMsgHandler(RestartStreamListenerMsg msg) { _logger.Info($"Restarting {Context.Self.Path.Name}"); _shouldSendProcessSportsMessage = true; IActorRef streamListenerActor = Context.Child(StreamListenerActor.GetName(msg.FixtureId)); streamListenerActor.Tell(new StopStreamingMsg()); }
//this is used to ensure we don't get blocked in Busy state //so we process self scheduled message at predefined interval to check/update the actor state and flags private void CheckStreamListenerBuilderActorStateMsgHandler(CheckStreamListenerBuilderActorStateMsg msg) { List <string> fixtureIdList = _creationInProgressFixtureIdSet.ToList(); foreach (var fixtureId in fixtureIdList) { var streamListenerActorName = StreamListenerActor.GetName(fixtureId); var streamListenerActorRef = _streamListenerManagerActorContext.Child(streamListenerActorName); if (streamListenerActorRef.IsNobody()) { _logger.Debug( $"CheckStreamListenerBuilderActorStateMsgHandler" + $" - fixtureId={fixtureId}" + $" - StreamListenerActor instance doesn't exist. Going to remove it from the internal state."); RemoveFixtureFromSet(fixtureId); } else { StreamListenerState?streamListenerActorState; try { streamListenerActorState = streamListenerActorRef .Ask <StreamListenerState>( new GetStreamListenerActorStateMsg(), TimeSpan.FromSeconds(30)) .Result; } catch (Exception) { //if we haven't heard back from StreamListenerActor then we can't identify it's state streamListenerActorState = null; } if (streamListenerActorState.HasValue && streamListenerActorState.Value != StreamListenerState.Initializing) { RemoveFixtureFromSet(fixtureId); } _logger.Debug( $"CheckStreamListenerBuilderActorStateMsgHandler" + $" - fixtureId={fixtureId}" + $" - streamListenerActorState={streamListenerActorState?.ToString() ?? "null"}" + $" - StreamListenerActor instance has already been created"); } } CheckActiveState(); _logger.Debug( $"CheckStreamListenerBuilderActorStateMsgHandler completed" + $" - _creationInProgressFixtureIdSetCount={_creationInProgressFixtureIdSet.Count} items"); }
private void StreamConnectedMsgHandler(StreamConnectedMsg msg) { IActorRef streamListenerActor = Context.Child(StreamListenerActor.GetName(msg.FixtureId)); Context.Watch(streamListenerActor); _streamListenerBuilderActorRef.Tell(new StreamListenerCreationCompletedMsg { FixtureId = msg.FixtureId, FixtureStatus = msg.FixtureStatus }); }
private void BuildStreamListenerActorInstance(object msg, IResourceFacade resource) { var streamListenerActorName = StreamListenerActor.GetName(resource.Id); if (_streamListenerManagerActorContext.Child(streamListenerActorName).IsNobody()) { if (_creationInProgressFixtureIdSet.Count + 1 > _settings.FixtureCreationConcurrency) { _logger.Warn( $"BuildStreamListenerActorInstance - {resource}" + $" - {msg.GetType().Name}" + $" - fixture creation concurrency limit of {_settings.FixtureCreationConcurrency} has been reached" + $" - Moving to Busy State" + $" - _creationInProgressFixtureIdSetCount={_creationInProgressFixtureIdSet.Count} items"); Become(Busy); Self.Tell(msg); } else { _logger.Debug( $"BuildStreamListenerActorInstance - {resource} with MatchStatus={resource.MatchStatus}" + $" - {msg.GetType().Name}" + $" - _creationInProgressFixtureIdSetCount={_creationInProgressFixtureIdSet.Count} items" + $" - Going to create the Stream Listener Actor Instance"); _streamListenerManagerActorContext.ActorOf(Props.Create(() => new StreamListenerActor( _settings, _adapterPlugin, resource, _stateManager, _suspensionManager, _streamHealthCheckValidation, _fixtureValidation)), streamListenerActorName); if (!_creationInProgressFixtureIdSet.Contains(resource.Id)) { _creationInProgressFixtureIdSet.Add(resource.Id); } } } else { _logger.Debug( $"BuildStreamListenerActorInstance - {resource}" + $" - {msg.GetType().Name}" + $" - StreamListenerActor instance not created as existing instance has been found"); } }
private void FaultControllerActorOnErrorOcured(SdkErrorMessage sdkErrorArgs) { if (sdkErrorArgs.ShouldSuspend) { _logger.Warn($"SDK Error occured, all Fixtures will be suspended {sdkErrorArgs.ErrorMessage}"); var streamListeners = _streamListeners.Values.SelectMany(_ => _.Keys); foreach (var sl in streamListeners) { IActorRef streamListenerActor = Context.Child(StreamListenerActor.GetName(sl)); streamListenerActor.Tell(new SuspendMessage(SuspensionReason.SDK_ERROR)); } } }
private void ProcessResourceMsgHandler(ProcessResourceMsg msg) { _logger.Info( $"ProcessResourceMsgHandler for {msg.Resource} Epoch={msg.Resource.Content?.MatchStatus}{(msg.Resource.IsMatchOver ? $" isMatchOver=true": "")}"); if (msg.Resource.Content == null) { _logger.Info($"ProcessResourceMsgHandler for {msg.Resource} content=NULL terminating"); return; } IActorRef streamListenerActor = Context.Child(StreamListenerActor.GetName(msg.Resource.Id)); if (streamListenerActor.IsNobody()) { var fixtureState = GetFixtureState(msg.Resource); if (fixtureState != null && fixtureState.Sequence > msg.Resource.Content.Sequence) { _logger.Info($"ProcessResourceMsgHandler for {msg.Resource} message is too old: messageSequence={msg.Resource.Content.Sequence} stateSequence={fixtureState.Sequence} terminating"); return; } _logger.Info( $"Stream listener for {msg.Resource} doesn't exist. Going to trigger creation."); _streamListenerBuilderActorRef.Tell(new CreateStreamListenerMsg { Resource = msg.Resource }); } else { _logger.Info( $"Stream listener for {msg.Resource} already exists. Going to trigger stream health check."); streamListenerActor.Tell(new StreamHealthCheckMsg { Resource = msg.Resource, Time = DateTime.Now }); } }
private void ProcessResourceMsgHandler(ProcessResourceMsg msg) { _logger.Info( $"ProcessResourceMsgHandler for {msg.Resource} Epoch={msg.Resource.Content.MatchStatus}"); IActorRef streamListenerActor = Context.Child(StreamListenerActor.GetName(msg.Resource.Id)); if (streamListenerActor.IsNobody()) { _logger.Info( $"Stream listener for {msg.Resource} doesn't exist. Going to trigger creation."); _streamListenerBuilderActorRef.Tell(new CreateStreamListenerMsg { Resource = msg.Resource }); } else { _logger.Info( $"Stream listener for {msg.Resource} already exists. Going to trigger stream health check."); streamListenerActor.Tell(new StreamHealthCheckMsg { Resource = msg.Resource }); } }
private void ClearFixtureStateMsgHandler(ClearFixtureStateMsg msg) { IActorRef streamListenerActor = Context.Child(StreamListenerActor.GetName(msg.FixtureId)); streamListenerActor.Tell(msg); }
private void RetrieveAndProcessSnapshotMsgHandler(RetrieveAndProcessSnapshotMsg msg) { IActorRef streamListenerActor = Context.Child(StreamListenerActor.GetName(msg.FixtureId)); streamListenerActor.Tell(msg); }