예제 #1
0
        /// <summary>
        /// Wird aktiviert, wenn das Zugriffsmodul Daten anfordert.
        /// </summary>
        public override void OnWaitData()
        {
            // Already done
            if (m_Disposed)
            {
                return;
            }

            // Still calling?
            if (m_Waiting)
            {
                return;
            }

            // Test for move request
            if (m_Move.HasValue)
            {
                // Take it
                if (m_Length.HasValue)
                {
                    m_Position = (long)(m_Move.Value * m_Length.Value);
                }

                // Forget
                m_Move = null;
            }
            else
            {
                // See how internal timing is currently set
                var offset = Accessor.StreamTimeOffset;
                if (offset.HasValue)
                {
                    if (offset.Value < RestartTrigger)
                    {
                        // Try restart
                        if (!RestartRecording())
                        {
                            return;
                        }
                    }
                    else if (offset.Value >= MaximumAheadTime)
                    {
                        // Do not feed any more data - for now
                        return;
                    }
                }
            }

            // Split off
            var parts = Adaptor.Target.Split(':');

            // Request will start right now
            m_Waiting = true;

            // Force server to send data
            VCRNETRestProxy.RequestFilePart(Adaptor.EndPoint, m_Path, m_Position, ChunkSize, parts[0], ushort.Parse(parts[1]), DataAvailable, null);
        }