internal async ValueTask ProcessChannel(RabbitMQProtocolReader protocol, FrameHeader header, MethodHeader method, CancellationToken token = default)
        {
            switch (method.MethodId)
            {
            case 11:     //open-ok
            {
                var openOk = await protocol.ReadChannelOpenOkAsync(token).ConfigureAwait(false);

                await _channelHandler.OnChannelOpenOkAsync(header.Channel).ConfigureAwait(false);

                break;
            }

            case 40:     //close
            {
                var closeInfo = await protocol.ReadCloseAsync(token).ConfigureAwait(false);;
                await _channelHandler.OnChannelCloseAsync(header.Channel, closeInfo).ConfigureAwait(false);

                break;
            }

            case 41:     //close-ok
            {
                var closeOk = await protocol.ReadCloseOkAsync(token).ConfigureAwait(false);

                await _channelHandler.OnChannelCloseOkAsync(header.Channel).ConfigureAwait(false);

                break;
            }

            default:
                throw new RabbitMQMethodException(nameof(ProcessChannel), method.ClassId, method.MethodId);
            }
        }