Beispiel #1
0
        internal async Task Handle_ContentHeader(ReadOnlySequence <byte> payload)
        {
            ulong Read()
            {
                var reader = new CustomBufferReader(payload);

                var classId  = reader.ReadUInt16();
                var weight   = reader.ReadUInt16();
                var bodySize = reader.ReadUInt64();

                pendingDelivery.Properties = reader.ReadBasicProperties();

                return(bodySize);
            }

            var size = Read();

            if (size == 0)
            {
                pendingDelivery.Body = new byte[0];

                await consumers[pendingDelivery.ConsumerTag](pendingDelivery);
                pendingDelivery = null;
            }
        }
Beispiel #2
0
        async Task Handle_Close(ReadOnlySequence <byte> arguments)
        {
            IsOpen = false;

            await methods.Send_CloseOk();

            if (replyIsExpected)
            {
                SendReply();
            }

            void SendReply()
            {
                var reader = new CustomBufferReader(arguments);

                var replyCode = reader.ReadUInt16();
                var replyText = reader.ReadShortString();

                var method = reader.ReadUInt32();

                var classId  = method >> 16;
                var methodId = method << 16 >> 16;

                var exception = new Exception($"Channel Closed: {replyCode} {replyText}. ClassId: {classId} MethodId: {methodId}");

                replyHandler(replyTaskCompletionSource, default, exception);