private void SetStreamListenerState(string sport, string fixtureId, StreamListenerState state) { var invalidSport = string.IsNullOrWhiteSpace(sport); var invalidFixtureId = string.IsNullOrWhiteSpace(fixtureId); if (invalidSport || invalidFixtureId) { if (invalidSport) { _logger.Warn("SetStreamListenerState has sport=null"); } if (invalidFixtureId) { _logger.Warn("SetStreamListenerState has fixtureId=null"); } return; } if (!_streamListeners.ContainsKey(sport)) { _streamListeners.Add(sport, new Dictionary <string, StreamListenerState>()); } if (!_streamListeners[sport].ContainsKey(fixtureId)) { _streamListeners[sport].Add(fixtureId, state); } _streamListeners[sport][fixtureId] = state; }
/// <summary> /// This method determines whether we can connect to the streaming server /// by checking current streaming state and match status /// </summary> /// <param name="resource"></param> /// <param name="state"></param> /// <returns></returns> public bool CanConnectToStreamServer(IResourceFacade resource, StreamListenerState state) { var isFixtureInSetup = resource.Content.MatchStatus == (int)MatchStatus.Setup; return (state != StreamListenerState.Streaming && (!isFixtureInSetup || _settings.AllowFixtureStreamingInSetupMode)); }
/// <summary> /// This method validates the streaming conditions /// check for resource sequence, match status, streaming state /// </summary> /// <param name="resource"></param> /// <param name="state"></param> /// <param name="sequence"></param> /// <returns></returns> public bool ValidateStream(IResourceFacade resource, StreamListenerState state, int sequence) { if (resource.Content.Sequence - sequence < _settings.StreamSafetyThreshold) { return(true); } if (ShouldIgnoreUnprocessedSequence(resource, state)) { return(true); } return(false); }
private bool ShouldIgnoreUnprocessedSequence(IResourceFacade resource, StreamListenerState state) { if (state != StreamListenerState.Streaming) { _logger.Debug($"ValidateStream skipped for {resource} Reason=\"Not Streaming\""); return(true); } if (resource.Content.MatchStatus == (int)MatchStatus.Setup && !_settings.AllowFixtureStreamingInSetupMode) { _logger.Debug($"ValidateStream skipped for {resource} Reason=\"Fixture is in setup state\""); return(true); } return(false); }
private void SetStreamListenerState(string sport, string fixtureId, StreamListenerState state) { if (!IsValidStreamListenerData(sport, fixtureId)) { return; } if (!_streamListeners.ContainsKey(sport)) { _streamListeners.Add(sport, new Dictionary <string, StreamListenerState>()); } if (!_streamListeners[sport].ContainsKey(fixtureId)) { _streamListeners[sport].Add(fixtureId, state); } _streamListeners[sport][fixtureId] = state; }
private void RecoverFromErroredState(StreamListenerState prevState, out Exception erroredEx) { erroredEx = null; try { _logger.Warn( $"Fixture {_resource} is in Errored State - trying now to reprocess full snapshot"); RetrieveAndProcessSnapshot(); switch (prevState) { case StreamListenerState.Initializing: { Initialize(); break; } case StreamListenerState.Streaming: { Become(Streaming); break; } } _erroredException = null; } catch (Exception ex) { _logger.Error( $"Fixture {_resource} failed to recover from Errored State - exception - {ex}"); erroredEx = ex; } }
/// <summary> /// This method validates the streaming conditions /// check for resource sequence, match status, streaming state /// </summary> /// <param name="resource"></param> /// <param name="state"></param> /// <param name="sequence"></param> /// <returns></returns> public bool IsSequenceValid(IResourceFacade resource, StreamListenerState state, int sequence) { return(resource.Content.Sequence <= sequence || ShouldIgnoreUnprocessedSequence(resource, state)); }