AK.F1.Timing.Live.LiveMessageReader.EnqueueMessagesFromKeyframe C# (CSharp) Method

EnqueueMessagesFromKeyframe() private method

private EnqueueMessagesFromKeyframe ( int keyframe ) : void
keyframe int
return void
        private void EnqueueMessagesFromKeyframe(int keyframe)
        {
            Message message;
            SetKeyframeMessage keyframeMessage;

            Log.InfoFormat("enqueuing messages from keyframe {0}", keyframe);

            using(StreamAndBufferBackup())
            {
                Decrypter.Reset();
                MessageStream = MessageStreamEndpoint.OpenKeyframe(keyframe);
                QueuedMessages.Enqueue(new SetStreamTimestampMessage());
                try
                {
                    do
                    {
                        if((message = ReadMessage()) != Message.Empty)
                        {
                            QueuedMessages.Enqueue(message);
                            PostProcessMessage(message, false);
                        }
                    } while((keyframeMessage = message as SetKeyframeMessage) == null);
                    if(keyframeMessage.Keyframe > keyframe)
                    {
                        Log.InfoFormat("keyframe contained a set keyframe message " +
                            "with a higher keyframe number ({0}) than the one currently " +
                            "being read ({1}), reloading.", keyframeMessage.Keyframe, keyframe);
                        // All queued messages will be superceeded in the new keyframe.
                        QueuedMessages.Clear();
                        MessageTranslator.Reset();
                        EnqueueMessagesFromKeyframe(keyframeMessage.Keyframe);
                        return;
                    }
                }
                finally
                {
                    DisposeOfMessageStream();
                }
            }
            Decrypter.Reset();
            Log.InfoFormat("enqueued {0} messages from keyframe {1}", QueuedMessages.Count, keyframe);
        }