Example usage for io.netty.handler.codec.http2 Http2ConnectionAdapter Http2ConnectionAdapter

List of usage examples for io.netty.handler.codec.http2 Http2ConnectionAdapter Http2ConnectionAdapter

Introduction

In this page you can find the example usage for io.netty.handler.codec.http2 Http2ConnectionAdapter Http2ConnectionAdapter.

Prototype

Http2ConnectionAdapter

Source Link

Usage

From source file:io.grpc.netty.NettyClientHandler.java

License:Apache License

private NettyClientHandler(Http2ConnectionDecoder decoder, StreamBufferingEncoder encoder,
        Http2Settings settings, ClientTransportLifecycleManager lifecycleManager,
        KeepAliveManager keepAliveManager, Supplier<Stopwatch> stopwatchFactory,
        final Runnable tooManyPingsRunnable, TransportTracer transportTracer, Attributes eagAttributes,
        String authority) {/*  w  w w. j a  va  2  s . c o  m*/
    super(/* channelUnused= */ null, decoder, encoder, settings);
    this.lifecycleManager = lifecycleManager;
    this.keepAliveManager = keepAliveManager;
    this.stopwatchFactory = stopwatchFactory;
    this.transportTracer = Preconditions.checkNotNull(transportTracer);
    this.eagAttributes = eagAttributes;
    this.authority = authority;
    this.attributes = Attributes.newBuilder().set(GrpcAttributes.ATTR_CLIENT_EAG_ATTRS, eagAttributes).build();

    // Set the frame listener on the decoder.
    decoder().frameListener(new FrameListener());

    Http2Connection connection = encoder.connection();
    streamKey = connection.newKey();

    connection.addListener(new Http2ConnectionAdapter() {
        @Override
        public void onGoAwayReceived(int lastStreamId, long errorCode, ByteBuf debugData) {
            byte[] debugDataBytes = ByteBufUtil.getBytes(debugData);
            goingAway(statusFromGoAway(errorCode, debugDataBytes));
            if (errorCode == Http2Error.ENHANCE_YOUR_CALM.code()) {
                String data = new String(debugDataBytes, UTF_8);
                logger.log(Level.WARNING, "Received GOAWAY with ENHANCE_YOUR_CALM. Debug data: {1}", data);
                if ("too_many_pings".equals(data)) {
                    tooManyPingsRunnable.run();
                }
            }
        }

        @Override
        public void onStreamActive(Http2Stream stream) {
            if (connection().numActiveStreams() == 1 && NettyClientHandler.this.keepAliveManager != null) {
                NettyClientHandler.this.keepAliveManager.onTransportActive();
            }
        }

        @Override
        public void onStreamClosed(Http2Stream stream) {
            // Although streams with CALL_OPTIONS_RPC_OWNED_BY_BALANCER are not marked as "in-use" in
            // the first place, we don't propagate that option here, and it's safe to reset the in-use
            // state for them, which will be a cheap no-op.
            inUseState.updateObjectInUse(stream, false);
            if (connection().numActiveStreams() == 0 && NettyClientHandler.this.keepAliveManager != null) {
                NettyClientHandler.this.keepAliveManager.onTransportIdle();
            }
        }
    });
}

From source file:io.grpc.netty.NettyServerHandler.java

License:Apache License

private NettyServerHandler(ChannelPromise channelUnused, final Http2Connection connection,
        ServerTransportListener transportListener,
        List<? extends ServerStreamTracer.Factory> streamTracerFactories, TransportTracer transportTracer,
        Http2ConnectionDecoder decoder, Http2ConnectionEncoder encoder, Http2Settings settings,
        int maxMessageSize, long keepAliveTimeInNanos, long keepAliveTimeoutInNanos,
        long maxConnectionIdleInNanos, long maxConnectionAgeInNanos, long maxConnectionAgeGraceInNanos,
        final KeepAliveEnforcer keepAliveEnforcer) {
    super(channelUnused, decoder, encoder, settings);

    final MaxConnectionIdleManager maxConnectionIdleManager;
    if (maxConnectionIdleInNanos == MAX_CONNECTION_IDLE_NANOS_DISABLED) {
        maxConnectionIdleManager = null;
    } else {/*from   w ww. j a v  a  2s  .co  m*/
        maxConnectionIdleManager = new MaxConnectionIdleManager(maxConnectionIdleInNanos) {
            @Override
            void close(ChannelHandlerContext ctx) {
                if (gracefulShutdown == null) {
                    gracefulShutdown = new GracefulShutdown("max_idle", null);
                    gracefulShutdown.start(ctx);
                    ctx.flush();
                }
            }
        };
    }

    connection.addListener(new Http2ConnectionAdapter() {
        @Override
        public void onStreamActive(Http2Stream stream) {
            if (connection.numActiveStreams() == 1) {
                keepAliveEnforcer.onTransportActive();
                if (maxConnectionIdleManager != null) {
                    maxConnectionIdleManager.onTransportActive();
                }
            }
        }

        @Override
        public void onStreamClosed(Http2Stream stream) {
            if (connection.numActiveStreams() == 0) {
                keepAliveEnforcer.onTransportIdle();
                if (maxConnectionIdleManager != null) {
                    maxConnectionIdleManager.onTransportIdle();
                }
            }
        }
    });

    checkArgument(maxMessageSize >= 0, "maxMessageSize must be >= 0");
    this.maxMessageSize = maxMessageSize;
    this.keepAliveTimeInNanos = keepAliveTimeInNanos;
    this.keepAliveTimeoutInNanos = keepAliveTimeoutInNanos;
    this.maxConnectionIdleManager = maxConnectionIdleManager;
    this.maxConnectionAgeInNanos = maxConnectionAgeInNanos;
    this.maxConnectionAgeGraceInNanos = maxConnectionAgeGraceInNanos;
    this.keepAliveEnforcer = checkNotNull(keepAliveEnforcer, "keepAliveEnforcer");

    streamKey = encoder.connection().newKey();
    this.transportListener = checkNotNull(transportListener, "transportListener");
    this.streamTracerFactories = checkNotNull(streamTracerFactories, "streamTracerFactories");
    this.transportTracer = checkNotNull(transportTracer, "transportTracer");

    // Set the frame listener on the decoder.
    decoder().frameListener(new FrameListener());
}