Example usage for io.netty.channel ChannelFutureListener ChannelFutureListener

List of usage examples for io.netty.channel ChannelFutureListener ChannelFutureListener

Introduction

In this page you can find the example usage for io.netty.channel ChannelFutureListener ChannelFutureListener.

Prototype

ChannelFutureListener

Source Link

Usage

From source file:io.reactivex.netty.protocol.http.MultipleFutureListener.java

License:Apache License

public MultipleFutureListener(final ChannelPromise completionPromise) {
    if (null == completionPromise) {
        throw new NullPointerException("Promise can not be null.");
    }/*w  ww . ja va  2 s.  c o m*/
    this.completionPromise = completionPromise;
    completionObservable = Observable.create(new Observable.OnSubscribe<Void>() {
        @Override
        public void call(final Subscriber<? super Void> subscriber) {
            MultipleFutureListener.this.completionPromise.addListener(new ChannelFutureListener() {
                @Override
                public void operationComplete(ChannelFuture future) throws Exception {
                    if (future.isSuccess()) {
                        subscriber.onCompleted();
                    } else {
                        subscriber.onError(future.cause());
                    }
                }
            });
        }
    });
}

From source file:io.reactivex.netty.protocol.http.server.ServerRequestResponseConverter.java

License:Apache License

private void addWriteCompleteEvents(ChannelPromise promise, final long startTimeMillis,
        final HttpServerMetricsEvent<HttpServerMetricsEvent.EventType> successEvent,
        final HttpServerMetricsEvent<HttpServerMetricsEvent.EventType> failureEvent) {
    promise.addListener(new ChannelFutureListener() {
        @Override/* w ww  . j  a  v  a2  s.co  m*/
        public void operationComplete(ChannelFuture future) throws Exception {
            if (future.isSuccess()) {
                eventsSubject.onEvent(successEvent, Clock.onEndMillis(startTimeMillis));
            } else {
                eventsSubject.onEvent(failureEvent, Clock.onEndMillis(startTimeMillis), future.cause());
            }
        }
    });
}

From source file:io.reactivex.netty.protocol.http.websocket.WebSocketServerHandler.java

License:Apache License

@Override
public void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {
    if (msg instanceof FullHttpRequest) {
        ChannelFuture upgradeFuture = handleHttpRequest(ctx, (FullHttpRequest) msg);
        if (upgradeFuture != null) {
            updatePipeline(ctx);//  ww  w  . j  a v  a2s . co m
            upgradeFuture.addListener(new ChannelFutureListener() {
                @Override
                public void operationComplete(ChannelFuture future) throws Exception {
                    if (future.isSuccess()) {
                        handshakeFuture.setSuccess();
                        eventsSubject.onEvent(WebSocketServerMetricsEvent.HANDSHAKE_PROCESSED);
                    } else {
                        handshakeFuture.setFailure(future.cause());
                        eventsSubject.onEvent(WebSocketServerMetricsEvent.HANDSHAKE_FAILURE);
                    }
                }
            });
        }
    } else {
        ctx.fireChannelRead(msg);
    }
}

From source file:io.reactivex.netty.util.MultipleFutureListener.java

License:Apache License

public MultipleFutureListener(final ChannelPromise completionPromise) {
    if (null == completionPromise) {
        throw new NullPointerException("Promise can not be null.");
    }//from ww  w . j a  v a 2s .  c  o  m
    this.completionPromise = completionPromise;
    completionObservable = Observable.create(new Observable.OnSubscribe<Void>() {
        @Override
        public void call(final Subscriber<? super Void> subscriber) {
            if (listeningToCount.get() == 0) {
                MultipleFutureListener.this.completionPromise.trySuccess();
            }
            MultipleFutureListener.this.completionPromise.addListener(new ChannelFutureListener() {
                @Override
                public void operationComplete(ChannelFuture future) throws Exception {
                    if (future.isSuccess()) {
                        subscriber.onCompleted();
                    } else {
                        subscriber.onError(future.cause());
                    }
                }
            });
        }
    });
}

From source file:io.scalecube.socketio.pipeline.WebSocketHandler.java

License:Apache License

private boolean handshake(final ChannelHandlerContext ctx, final FullHttpRequest req,
        final String requestPath) {
    WebSocketServerHandshakerFactory wsFactory = new WebSocketServerHandshakerFactory(getWebSocketLocation(req),
            null, false, maxWebSocketFrameSize);
    WebSocketServerHandshaker handshaker = wsFactory.newHandshaker(req);
    if (handshaker != null) {
        handshaker.handshake(ctx.channel(), req).addListener(new ChannelFutureListener() {
            @Override// ww w  .  ja  v a 2  s.c  om
            public void operationComplete(ChannelFuture future) throws Exception {
                if (future.isSuccess()) {
                    final String sessionId = PipelineUtils.getSessionId(requestPath);
                    connect(ctx, req, sessionId);
                }
            }
        });
        return true;
    } else {
        WebSocketServerHandshakerFactory.sendUnsupportedVersionResponse(ctx.channel());
    }
    return false;
}

From source file:io.urmia.proxy.DirectWriteBackHttpProxyBackendHandler.java

License:Open Source License

@Override
public void channelRead(final ChannelHandlerContext ctx, Object msg) throws Exception {

    inboundChannel.writeAndFlush(msg).addListener(new ChannelFutureListener() {
        @Override//from  ww  w  .j a va  2  s  . com
        public void operationComplete(ChannelFuture future) throws Exception {
            if (future.isSuccess()) {
                //log.info("success on write back to inbound");
                ctx.channel().read();
            } else {
                log.warn("fail on write to back to inbound: {}", future.cause());
                future.channel().close();
            }
        }
    });

}

From source file:io.vertx.core.dns.impl.fix.DnsNameResolver.java

License:Apache License

/**
 * Creates a new DNS-based name resolver that communicates with the specified list of DNS servers.
 *
 * @param eventLoop the {@link EventLoop} which will perform the communication with the DNS servers
 * @param channelFactory the {@link ChannelFactory} that will create a {@link DatagramChannel}
 * @param nameServerAddresses the addresses of the DNS server. For each DNS query, a new stream is created from
 *                            this to determine which DNS server should be contacted for the next retry in case
 *                            of failure.
 * @param resolveCache the DNS resolved entries cache
 * @param queryTimeoutMillis timeout of each DNS query in millis
 * @param resolvedAddressTypes list of the protocol families
 * @param recursionDesired if recursion desired flag must be set
 * @param maxQueriesPerResolve the maximum allowed number of DNS queries for a given name resolution
 * @param traceEnabled if trace is enabled
 * @param maxPayloadSize the capacity of the datagram packet buffer
 * @param optResourceEnabled if automatic inclusion of a optional records is enabled
 * @param hostsFileEntriesResolver the {@link HostsFileEntriesResolver} used to check for local aliases
 * @param searchDomains TODO//from  w  w w.ja  v a  2  s.  c om
 * @param ndots TODO
 */
public DnsNameResolver(EventLoop eventLoop, ChannelFactory<? extends DatagramChannel> channelFactory,
        DnsServerAddresses nameServerAddresses, DnsCache resolveCache, long queryTimeoutMillis,
        InternetProtocolFamily[] resolvedAddressTypes, boolean recursionDesired, int maxQueriesPerResolve,
        boolean traceEnabled, int maxPayloadSize, boolean optResourceEnabled,
        HostsFileEntriesResolver hostsFileEntriesResolver, List<String> searchDomains, int ndots) {

    super(eventLoop);
    checkNotNull(channelFactory, "channelFactory");
    this.nameServerAddresses = checkNotNull(nameServerAddresses, "nameServerAddresses");
    this.queryTimeoutMillis = checkPositive(queryTimeoutMillis, "queryTimeoutMillis");
    this.resolvedAddressTypes = checkNonEmpty(resolvedAddressTypes, "resolvedAddressTypes");
    this.recursionDesired = recursionDesired;
    this.maxQueriesPerResolve = checkPositive(maxQueriesPerResolve, "maxQueriesPerResolve");
    this.traceEnabled = traceEnabled;
    this.maxPayloadSize = checkPositive(maxPayloadSize, "maxPayloadSize");
    this.optResourceEnabled = optResourceEnabled;
    this.hostsFileEntriesResolver = checkNotNull(hostsFileEntriesResolver, "hostsFileEntriesResolver");
    this.resolveCache = resolveCache;
    this.searchDomains = checkNotNull(searchDomains, "searchDomains");
    this.ndots = checkPositive(ndots, "ndots");

    Bootstrap b = new Bootstrap();
    b.group(executor());
    b.channelFactory(channelFactory);
    b.option(ChannelOption.DATAGRAM_CHANNEL_ACTIVE_ON_REGISTRATION, true);
    final DnsResponseHandler responseHandler = new DnsResponseHandler(executor().<Channel>newPromise());
    b.handler(new ChannelInitializer<DatagramChannel>() {
        @Override
        protected void initChannel(DatagramChannel ch) throws Exception {
            ch.pipeline().addLast(DECODER, ENCODER, responseHandler);
        }
    });

    channelFuture = responseHandler.channelActivePromise;
    ch = (DatagramChannel) b.register().channel();
    ch.config().setRecvByteBufAllocator(new FixedRecvByteBufAllocator(maxPayloadSize));

    ch.closeFuture().addListener(new ChannelFutureListener() {
        @Override
        public void operationComplete(ChannelFuture future) throws Exception {
            resolveCache.clear();
        }
    });
}

From source file:io.vertx.core.dns.impl.fix.DnsQueryContext.java

License:Apache License

private void writeQuery(final DnsQuery query) {
    final ChannelFuture writeFuture = parent.ch.writeAndFlush(query);
    if (writeFuture.isDone()) {
        onQueryWriteCompletion(writeFuture);
    } else {/*from  www.ja  v  a 2 s  .  com*/
        writeFuture.addListener(new ChannelFutureListener() {
            @Override
            public void operationComplete(ChannelFuture future) throws Exception {
                onQueryWriteCompletion(writeFuture);
            }
        });
    }
}

From source file:io.vertx.core.http.impl.ServerConnection.java

License:Open Source License

NetSocket createNetSocket() {
    NetSocketImpl socket = new NetSocketImpl(vertx, channel, context, server.getSslHelper(), metrics);
    socket.metric(metric());/*from   w ww  .j a  va 2  s  .c  om*/
    Map<Channel, NetSocketImpl> connectionMap = new HashMap<>(1);
    connectionMap.put(channel, socket);

    // Flush out all pending data
    endReadAndFlush();

    // remove old http handlers and replace the old handler with one that handle plain sockets
    ChannelPipeline pipeline = channel.pipeline();
    ChannelHandler compressor = pipeline.get(HttpChunkContentCompressor.class);
    if (compressor != null) {
        pipeline.remove(compressor);
    }

    pipeline.remove("httpDecoder");
    if (pipeline.get("chunkedWriter") != null) {
        pipeline.remove("chunkedWriter");
    }

    channel.pipeline().replace("handler", "handler",
            new VertxNetHandler<NetSocketImpl>(channel, socket, connectionMap) {
                @Override
                public void exceptionCaught(ChannelHandlerContext chctx, Throwable t) throws Exception {
                    // remove from the real mapping
                    server.removeChannel(channel);
                    super.exceptionCaught(chctx, t);
                }

                @Override
                public void channelInactive(ChannelHandlerContext chctx) throws Exception {
                    // remove from the real mapping
                    server.removeChannel(channel);
                    super.channelInactive(chctx);
                }

                @Override
                public void channelRead(ChannelHandlerContext chctx, Object msg) throws Exception {
                    if (msg instanceof HttpContent) {
                        ReferenceCountUtil.release(msg);
                        return;
                    }
                    super.channelRead(chctx, msg);
                }

                @Override
                protected void handleMsgReceived(NetSocketImpl conn, Object msg) {
                    ByteBuf buf = (ByteBuf) msg;
                    conn.handleDataReceived(Buffer.buffer(buf));
                }
            });

    // check if the encoder can be removed yet or not.
    if (lastWriteFuture == null) {
        channel.pipeline().remove("httpEncoder");
    } else {
        lastWriteFuture.addListener(new ChannelFutureListener() {
            @Override
            public void operationComplete(ChannelFuture future) throws Exception {
                channel.pipeline().remove("httpEncoder");
            }
        });
    }
    return socket;
}

From source file:io.viewserver.network.netty.NettyNetworkAdapter.java

License:Apache License

@Override
public ListenableFuture<IChannel> connect(IEndpoint endpoint) {
    SettableFuture<IChannel> promise = SettableFuture.create();
    final INettyEndpoint.IClient client = ((INettyEndpoint) endpoint).getClient(getClientWorkerGroup(),
            new NettyPipelineInitialiser(networkMessageWheel));
    ChannelFuture channelFuture = client.connect();
    channelFuture.addListener(new ChannelFutureListener() {
        @Override/* www.  j ava 2 s  .  co  m*/
        public void operationComplete(ChannelFuture future) throws Exception {
            if (future.isSuccess()) {
                NettyChannel channel = new NettyChannel(future.channel());
                promise.set(channel);
            } else {
                promise.setException(future.cause());
            }
        }
    });
    return promise;
}