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);
void Handle_DeclareOk(object tcs, ReadOnlySequence <byte> arguments, Exception exception) { var declareOk = (TaskCompletionSource <DeclareResult>)tcs; if (exception != null) { declareOk.SetException(exception); } else { var reader = new CustomBufferReader(arguments); DeclareResult result; result.QueueName = reader.ReadShortString(); result.MessageCount = reader.ReadUInt32(); result.ConsumerCount = reader.ReadUInt32(); declareOk.SetResult(result); } }
void Handle_DeleteOk(object tcs, ReadOnlySequence <byte> arguments, Exception exception) { var deleteOk = (TaskCompletionSource <uint>)tcs; if (exception != null) { deleteOk.SetException(exception); } else { var reader = new CustomBufferReader(arguments); var messageCount = reader.ReadUInt32(); deleteOk.SetResult(messageCount); } }