CSharpRTMP.Core.Protocols.Rtmfp.Packet.Add C# (CSharp) Метод

Add() публичный Метод

public Add ( Stream fragment ) : void
fragment Stream
Результат void
        public void Add(Stream fragment)
        {
            //var buffer = new BufferWithOffset(fragment.BaseStream);
           // _buffer.Write(buffer.Buffer, buffer.Offset, buffer.Length);
            fragment.CopyDataTo(_buffer);
            Fragments++;
        }

Usage Example

Пример #1
0
        private void FragmentSortedHandler(ulong stage, Stream fragment, byte flags)
        {
            if (stage <= Stage)
            {
                Logger.FATAL("Stage {0} not sorted on flow {1}", stage, Id);
                return;
            }
            if (stage > Stage + 1)
            {
                var lostCount = (uint)(stage - Stage - 1);
                Stage = stage;
                if (_packet != null)
                {
                    _packet.Dispose();
                    _packet = null;
                }
                if ((flags & FlowWriter.MESSAGE_WITH_BEFOREPART) != 0)
                {
                    LostFragmentsHandler(lostCount + 1);
                    return;
                }
                LostFragmentsHandler(lostCount);
            }
            else
            {
                Stage = stage;
            }
            if ((flags & FlowWriter.MESSAGE_ABANDONMENT) != 0)
            {
                if (_packet != null)
                {
                    _packet.Dispose();
                    _packet = null;
                }
            }
            Stream message = null;

            if ((flags & FlowWriter.MESSAGE_WITH_BEFOREPART) != 0)
            {
                if (_packet == null)
                {
                    Logger.WARN("A received message tells to have a 'beforepart' and nevertheless partbuffer is empty, certainly some packets were lost");
                    LostFragmentsHandler(1);
                    _packet?.Dispose();
                    _packet = null;
                    return;
                }
                _packet.Add(fragment);
                if ((flags & FlowWriter.MESSAGE_WITH_AFTERPART) != 0)
                {
                    return;
                }
                message = _packet.Release();
            }
            else if ((flags & FlowWriter.MESSAGE_WITH_AFTERPART) != 0)
            {
                if (_packet != null)
                {
                    Logger.FATAL("A received message tells to have not 'beforepart' and nevertheless partbuffer exists");
                    LostFragmentsHandler(_packet.Fragments);
                    _packet.Dispose();
                }
                _packet = new Packet(fragment);
                return;
            }
            _packet = null;
            if (IsWaitingSync)
            {
                if (message == null)
                {
                    message = Utils.Rms.GetStream();
                    fragment.CopyPartTo(message, (int)fragment.GetAvaliableByteCounts());
                    message.Position = 0;
                }
                SyncMessageQueue.Enqueue(message);
                return;
            }
            HandlerMessage(message ?? fragment, message != null);
        }