private void RetrieveAndProcessSnapshotIfNeeded()
        {
            FixtureState state           = _eventState.GetFixtureState(_resource.Id);
            int          sequence_number = -1;

            if (state != null)
            {
                sequence_number = state.Sequence;
            }


            int resource_sequence = SequenceOnStreamingAvailable;

            _logger.DebugFormat("{0} has stored sequence={1} and current_sequence={2}", _resource, sequence_number, resource_sequence);

            if (sequence_number == -1 || resource_sequence != sequence_number)
            {
                RetrieveAndProcessSnapshot();
            }
            else
            {
                Fixture fixture = new Fixture {
                    Sequence = sequence_number, Id = _resource.Id
                };

                if (state != null)
                {
                    fixture.MatchStatus = state.MatchStatus.ToString();
                }

                try
                {
                    //unsuspends markets suspended by adapter
                    _stateManager.StateProvider.SuspensionManager.Unsuspend(fixture.Id);
                    _platformConnector.UnSuspend(fixture);
                }
                catch (Exception e)
                {
                    _logger.Error(string.Format("Error unsuspending {0}", _resource), e);
                    SetErrorState();
                }
            }
        }
        public void Unsuspend(Fixture fixture)
        {
            IMarketStateCollection state = _stateProvider.GetMarketsState(fixture.Id);
            List <IMarketState>    marketStates;

            if (state == null)
            {
                _logger.WarnFormat($"State is not present for {fixture} - can't unsuspend");
                return;
            }

            var unsuspendedFixture = GetUnsuspendedFixture(state, out marketStates);

            if (unsuspendedFixture.Markets.Any())
            {
                _logger.InfoFormat("Unsuspending previously suspended markets in {0}", unsuspendedFixture);
                try
                {
                    _plugin.ProcessStreamUpdate(unsuspendedFixture);
                }
                catch (Exception ex)
                {
                    throw new PluginException($"Plugin ProcessStreamUpdate {fixture} error occured", ex);
                }
            }

            ((IUpdatableMarketStateCollection)state).OnMarketsForcedUnsuspension(marketStates);

            try
            {
                _plugin.UnSuspend(fixture);
            }
            catch (Exception ex)
            {
                throw new PluginException($"Plugin UnSuspend {fixture} error occured", ex);
            }
        }