/// <summary> /// </summary> /// <param name="transport"></param> /// <param name="sessionState"></param> protected void DoRestoreProducers(ITransport transport, SessionState sessionState) { // Restore the session's producers foreach(ProducerState producerState in sessionState.ProducerStates) { transport.Oneway(producerState.Info); } }
/// <summary> /// </summary> /// <param name="transport"></param> /// <param name="sessionState"></param> protected void DoRestoreConsumers(ITransport transport, SessionState sessionState) { // Restore the session's consumers but possibly in pull only (prefetch 0 state) till // recovery completes. ConnectionState connectionState = connectionStates[sessionState.Info.SessionId.ParentId]; bool connectionInterruptionProcessingComplete = connectionState.ConnectionInterruptProcessingComplete; // Restore the session's consumers foreach(ConsumerState consumerState in sessionState.ConsumerStates) { ConsumerInfo infoToSend = consumerState.Info; if(!connectionInterruptionProcessingComplete && infoToSend.PrefetchSize > 0 && transport.WireFormat.Version > 5) { infoToSend = consumerState.Info.Clone() as ConsumerInfo; connectionState.RecoveringPullConsumers.Add(infoToSend.ConsumerId, consumerState.Info); infoToSend.PrefetchSize = 0; if(Tracer.IsDebugEnabled) { Tracer.Debug("restore consumer: " + infoToSend.ConsumerId + " in pull mode pending recovery, overriding prefetch: " + consumerState.Info.PrefetchSize); } } if(Tracer.IsDebugEnabled) { Tracer.Debug("restore consumer: " + infoToSend.ConsumerId); } transport.Oneway(infoToSend); } }