CSharpRTMP.Core.Protocols.Rtmfp.FlowWriter.RaiseMessage C# (CSharp) Method

RaiseMessage() private method

private RaiseMessage ( ) : void
return void
        private void RaiseMessage()
        {
            var header = true;
            var stop = true;
            var sent = false;
           // var stage = _stageAck + 1;
            foreach (var message in _messagesSent)
            {
                if (!message.Repeatable)
                {
                    //stage += (ulong) message.Fragments.Count;
                    header = true;
                    continue;
                }
                if (stop)
                {
                    Band.Flush();
                    //HeaderFlag = true;
                    stop = false;
                }
                uint available;
                var content = message.GetReader(out available);
                var itFrag = message.Fragments.GetEnumerator();
                var notTheEnd = itFrag.MoveNext();
                while(notTheEnd)
                {
                    var contentSize = available;
                    var fragmentOffset = itFrag.Current.Offset;
                    var stage = itFrag.Current.Stage;
                    notTheEnd = itFrag.MoveNext();
                    byte flags = 0;
                    if (itFrag.Current.Offset > 0) flags |= MESSAGE_WITH_BEFOREPART;
                    if (notTheEnd)
                    {
                        flags |= MESSAGE_WITH_AFTERPART;
                        contentSize = itFrag.Current.Offset - fragmentOffset;
                    }
                    var size = contentSize + 4;
                    if (header) size += HeaderSize(stage);
                    if (size > Band.Writer.AvaliableBufferCounts)
                    {
                        if(!sent)Logger.FATAL("Raise messages on flowWriter {0} without sending!",Id);
                        Logger.Debug("Raise message on flowWriter {0} finishs on stage {1}",Id, stage);
                        return;
                    }
                    sent = true;
                    size -= 3;
                    Debug.WriteLine("raise message on flowWriter {0},stage {1}",Id, stage);
                    Flush(Band.WriteMessage((byte) (header?0x10:0x11),(ushort)size), stage++, flags,header,content,(ushort) contentSize);
                    available -= contentSize;
                    header = false;
                }
            }
            if(stop)_trigger.Stop();
        }