All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.azure.cosmos.implementation.directconnectivity.rntbd.RntbdRequestDecoder Maven / Gradle / Ivy

Go to download

This Package contains Microsoft Azure Cosmos SDK (with Reactive Extension Reactor support) for Azure Cosmos DB SQL API

There is a newer version: 4.60.0
Show newest version
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

package com.azure.cosmos.implementation.directconnectivity.rntbd;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;

import java.util.List;

public final class RntbdRequestDecoder extends ByteToMessageDecoder {
    /**
     * Prepare for decoding an @{link RntbdRequest} or fire a channel readTree event to pass the input message along.
     *
     * @param context the {@link ChannelHandlerContext} which this {@link ByteToMessageDecoder} belongs to
     * @param message the message to be decoded
     * @throws Exception thrown if an error occurs
     */
    @Override
    public void channelRead(final ChannelHandlerContext context, final Object message) throws Exception {

        if (message instanceof ByteBuf) {

            final ByteBuf in = (ByteBuf) message;
            final int resourceOperationType = in.getInt(in.readerIndex() + Integer.BYTES);

            if (resourceOperationType != 0) {
                super.channelRead(context, message);
                return;
            }
        }

        context.fireChannelRead(message);
    }

    /**
     * Decode the input {@link ByteBuf} to an {@link RntbdRequest} instance.
     * 

* This method will be called till either the input {@link ByteBuf} has nothing to readTree after return from this * method or till nothing was readTree from the input {@link ByteBuf}. * * @param context the {@link ChannelHandlerContext} to which this {@link ByteToMessageDecoder} belongs. * @param in the {@link ByteBuf} from which to read data. * @param out the {@link List} to which decoded messages should be added. * * @throws IllegalStateException thrown if an error occurs */ @Override protected void decode( final ChannelHandlerContext context, final ByteBuf in, final List out) throws IllegalStateException { final RntbdRequest request; in.markReaderIndex(); try { request = RntbdRequest.decode(in); } catch (final IllegalStateException error) { in.resetReaderIndex(); throw error; } in.discardReadBytes(); out.add(request); } }