예제 #1
0
        public void EnqueueOrMergeSendRequest(ReadOnlySpan <byte> message, SendRequestProcessingEngine engine)
        {
            var lockTaken = false;

            try
            {
                _lock.Enter(ref lockTaken);

                var currentEntry = _currentRequestEntry;

                if (currentEntry != null)
                {
                    if (TryAddMessageToExistingRequest(currentEntry, message))
                    {
                        return;
                    }
                }

                _currentRequestEntry = null;
            }
            finally
            {
                if (lockTaken)
                {
                    _lock.Exit();
                }
            }

            EnqueueNewMergeRequest(message, engine);
        }
예제 #2
0
 private void EnqueueNewMergeRequest(ReadOnlySpan <byte> message, SendRequestProcessingEngine engine)
 {
     using (var entry = engine.AcquireSendRequestEntry())
     {
         entry.Value->SetWriteRequest(_sessionId, message);
         _currentRequestEntry = entry.Value;
     }
 }