List of usage examples for io.netty.util.concurrent GenericFutureListener GenericFutureListener
GenericFutureListener
From source file:io.jsync.net.impl.DefaultNetSocket.java
License:Open Source License
@Override public NetSocket ssl(final Handler<Void> handler) { SslHandler sslHandler = channel.pipeline().get(SslHandler.class); if (sslHandler == null) { sslHandler = helper.createSslHandler(async, client); channel.pipeline().addFirst(sslHandler); }/*from w w w . ja va 2 s. com*/ sslHandler.handshakeFuture().addListener(new GenericFutureListener<Future<Channel>>() { @Override public void operationComplete(final Future<Channel> future) throws Exception { if (context.isOnCorrectWorker(channel.eventLoop())) { if (future.isSuccess()) { try { async.setContext(context); handler.handle(null); } catch (Throwable t) { context.reportException(t); } } else { context.reportException(future.cause()); } } else { context.execute(new Runnable() { public void run() { if (future.isSuccess()) { handler.handle(null); } else { context.reportException(future.cause()); } } }); } } }); return this; }
From source file:io.pravega.client.netty.impl.ClientConnectionInboundHandler.java
License:Open Source License
@Override public void sendAsync(List<Append> appends, CompletedCallback callback) { recentMessage.set(true);//from w w w . ja va 2s.c om Channel channel = getChannel(); ChannelPromise promise = channel.newPromise(); for (Append append : appends) { batchSizeTracker.recordAppend(append.getEventNumber(), append.getData().readableBytes()); channel.write(append, promise); } channel.flush(); promise.addListener(new GenericFutureListener<Future<? super Void>>() { @Override public void operationComplete(Future<? super Void> future) throws Exception { callback.complete(new ConnectionFailedException(future.cause())); } }); }
From source file:io.reactivex.netty.client.ClientChannelFactoryImpl.java
License:Apache License
@Override public ChannelFuture connect(final Subscriber<? super ObservableConnection<I, O>> subscriber, RxClient.ServerInfo serverInfo,//from w w w. ja v a 2 s . c o m final ClientConnectionFactory<I, O, ? extends ObservableConnection<I, O>> connectionFactory) { final long startTimeMillis = Clock.newStartTimeMillis(); eventsSubject.onEvent(ClientMetricsEvent.CONNECT_START); final ChannelFuture connectFuture = clientBootstrap.connect(serverInfo.getHost(), serverInfo.getPort()); subscriber.add(Subscriptions.create(new Action0() { @Override public void call() { if (!connectFuture.isDone()) { connectFuture.cancel(true); // Unsubscribe here means, no more connection is required. A close on connection is explicit. } } })); connectFuture.addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture future) throws Exception { try { if (!future.isSuccess()) { eventsSubject.onEvent(ClientMetricsEvent.CONNECT_FAILED, Clock.onEndMillis(startTimeMillis), future.cause()); subscriber.onError(future.cause()); } else { eventsSubject.onEvent(ClientMetricsEvent.CONNECT_SUCCESS, Clock.onEndMillis(startTimeMillis)); ChannelPipeline pipeline = future.channel().pipeline(); ChannelHandlerContext ctx = pipeline.lastContext(); // The connection uses the context for write which should always start from the tail. final ObservableConnection<I, O> newConnection = connectionFactory.newConnection(ctx); ChannelHandler lifecycleHandler = pipeline .get(RxRequiredConfigurator.CONN_LIFECYCLE_HANDLER_NAME); if (null == lifecycleHandler) { onNewConnection(newConnection, subscriber); } else { @SuppressWarnings("unchecked") ConnectionLifecycleHandler<I, O> handler = (ConnectionLifecycleHandler<I, O>) lifecycleHandler; SslHandler sslHandler = pipeline.get(SslHandler.class); if (null == sslHandler) { handler.setConnection(newConnection); onNewConnection(newConnection, subscriber); } else { sslHandler.handshakeFuture() .addListener(new GenericFutureListener<Future<? super Channel>>() { @Override public void operationComplete(Future<? super Channel> future) throws Exception { onNewConnection(newConnection, subscriber); } }); } } } } catch (Throwable throwable) { subscriber.onError(throwable); } } }); return connectFuture; }
From source file:io.soliton.protobuf.AbstractRpcServer.java
License:Apache License
/** * Stops this server.//from w w w . j a va2 s . com * <p/> * <p>This is a synchronous operation.</p> */ public void shutDown() { logger.info("Shutting down RPC server."); channel.close().addListener(new GenericFutureListener<Future<Void>>() { @Override public void operationComplete(Future<Void> future) throws Exception { parentGroup.shutdownGracefully(); childGroup.shutdownGracefully(); } }).awaitUninterruptibly(); }
From source file:io.soliton.protobuf.json.HttpJsonRpcClient.java
License:Apache License
@Override public <O extends Message> ListenableFuture<O> encodeMethodCall(final ClientMethod<O> method, Message input) { clientLogger.logMethodCall(method);/*from w w w .j a v a 2 s . co m*/ final JsonResponseFuture<O> responseFuture = handler.newProvisionalResponse(method); JsonObject request = new JsonRpcRequest(method.serviceName(), method.name(), new JsonPrimitive(responseFuture.requestId()), Messages.toJson(input)).toJson(); ByteBuf requestBuffer = Unpooled.buffer(); JsonWriter writer = new JsonWriter( new OutputStreamWriter(new ByteBufOutputStream(requestBuffer), Charsets.UTF_8)); GSON.toJson(request, writer); try { writer.flush(); } catch (IOException ioe) { // Deliberately ignored, as this doesn't involve any I/O } String host = ((InetSocketAddress) channel.remoteAddress()).getAddress().getHostAddress(); QueryStringEncoder encoder = new QueryStringEncoder(rpcPath); encoder.addParam("pp", "0"); HttpRequest httpRequest = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST, encoder.toString(), requestBuffer); httpRequest.headers().set(HttpHeaders.Names.HOST, host); httpRequest.headers().set(HttpHeaders.Names.CONTENT_TYPE, JsonRpcProtocol.CONTENT_TYPE); httpRequest.headers().set(HttpHeaders.Names.CONTENT_LENGTH, requestBuffer.readableBytes()); channel.writeAndFlush(httpRequest).addListener(new GenericFutureListener<ChannelFuture>() { public void operationComplete(ChannelFuture future) { if (!future.isSuccess()) { clientLogger.logLinkError(method, future.cause()); handler.finish(responseFuture.requestId()); responseFuture.setException(future.cause()); } } }); return responseFuture; }
From source file:io.soliton.protobuf.quartz.QuartzClient.java
License:Apache License
/** * {@inheritDoc}/*from w w w . j a va2 s .c o m*/ */ @Override public <O extends Message> ListenableFuture<O> encodeMethodCall(final ClientMethod<O> method, Message input) { // Channel was manually closed earlier if (refuseNewRequests.get()) { return Futures.immediateFailedFuture(new RuntimeException("Client is closed")); } // Channel was closed by the server - we make an attempt to reopen. if (shouldCreateNewChannel.get()) { try { reopenChannel(); channel.closeFuture().addListener(new ChannelCloser()); } catch (IOException ioe) { return Futures.immediateFailedFuture(ioe); } } // Normal operation mode clientLogger.logMethodCall(method); final EnvelopeFuture<O> output = handler.newProvisionalResponse(method); Envelope request = Envelope.newBuilder().setRequestId(output.requestId()).setService(method.serviceName()) .setMethod(method.name()).setPayload(input.toByteString()).build(); HttpRequest httpRequest = handler.convertRequest(request); channel.writeAndFlush(httpRequest).addListener(new GenericFutureListener<ChannelFuture>() { public void operationComplete(ChannelFuture future) { if (!future.isSuccess()) { clientLogger.logLinkError(method, future.cause()); handler.finish(output.requestId()); output.setException(future.cause()); } } }); return output; }
From source file:io.soliton.protobuf.socket.RpcClient.java
License:Apache License
/** * {@inheritDoc}/* w ww .j av a2 s . c o m*/ */ @Override public <O extends Message> ListenableFuture<O> encodeMethodCall(final ClientMethod<O> method, Message input) { clientLogger.logMethodCall(method); final EnvelopeFuture<O> output = handler.newProvisionalResponse(method); Envelope request = Envelope.newBuilder().setRequestId(output.requestId()).setService(method.serviceName()) .setMethod(method.name()).setPayload(input.toByteString()).build(); // TODO(julien): might be nice to couple the future returned from writeAndFlush // into the one returned to the user, so that calling cancel on the userland // future may also cancel the outgoing request if it isn't done yet. channel.writeAndFlush(request).addListener(new GenericFutureListener<ChannelFuture>() { public void operationComplete(ChannelFuture future) { if (!future.isSuccess()) { clientLogger.logLinkError(method, future.cause()); handler.finish(output.requestId()); output.setException(future.cause()); } } }); return output; }
From source file:io.urmia.api.handler.RestApiHandler.java
License:Open Source License
private void handleGET(final ChannelHandlerContext ctx, final ObjectRequest objectRequest) throws Exception { log.info("handleGET req: {}", httpRequest); mds.list(ctx.executor(), objectRequest).addListener(new GenericFutureListener<Future<ObjectResponse>>() { @Override//from w ww. j a v a 2 s . c o m public void operationComplete(Future<ObjectResponse> future) throws Exception { if (!future.isSuccess()) { log.error("future failed for handleGET: {}", objectRequest, future.cause()); sendError(ctx, HttpResponseStatus.INTERNAL_SERVER_ERROR); return; } ObjectResponse objectResponse = future.getNow(); log.info("result of mds.operate: {} -> {}", objectRequest, objectResponse); if (objectResponse instanceof ObjectResponse.EmptyResponse) { log.info("nothing found at: {}", objectRequest); sendError(ctx, HttpResponseStatus.NOT_FOUND); return; } if (objectResponse instanceof ObjectResponse.SingleObject) { log.info("GET is for a file. proxy for downloading: {}", objectResponse); setupProxyToGET(ctx, ((ObjectResponse.SingleObject) objectResponse).fullObjectName); return; } if (!(objectResponse instanceof ObjectResponse.MultipleObjects)) { log.info("multipleObjects.objects is not MultipleObjects: {}", objectResponse); sendError(ctx, HttpResponseStatus.NOT_FOUND); return; } log.info("returning result of mds.list: {}", objectResponse.json()); ctx.writeAndFlush(objectResponse.encode(), ctx.voidPromise()); } }); }
From source file:io.urmia.api.handler.RestApiHandler.java
License:Open Source License
private void handleDELETE(final ChannelHandlerContext ctx, final ObjectRequest request) throws IOException { log.info("handleDELETE req: {}", httpRequest); mds.delete(ctx.executor(), request).addListener(new GenericFutureListener<Future<ObjectResponse>>() { @Override//from ww w .ja va2s . c om public void operationComplete(Future<ObjectResponse> future) throws Exception { if (future.isSuccess()) { ObjectResponse response = future.get(); if (response instanceof ObjectResponse.Failure) { log.warn("error on handleDELETE: {} -> {}", request, response); sendError(ctx, response.encode()); } else { log.info("successful handleDELETE req: {}, rsp: {}", request, response); ctx.writeAndFlush(response.encode()); } } else { log.warn("error on handleDELETE: {}", request, future.cause()); sendError(ctx, HttpResponseStatus.BAD_REQUEST); } } }); }
From source file:io.urmia.api.handler.RestApiHandler.java
License:Open Source License
private void handleHEAD(final ChannelHandlerContext ctx, final ObjectRequest objectRequest) { log.info("handleHEAD uri: {} ", httpRequest.getUri()); mds.head(ctx.executor(), objectRequest).addListener(new GenericFutureListener<Future<ObjectResponse>>() { @Override/*from w ww. ja v a 2 s . com*/ public void operationComplete(Future<ObjectResponse> future) throws Exception { if (future.isSuccess()) { ObjectResponse objectResponse = future.get(); log.info("handleHEAD {} -> {}", objectRequest, objectResponse); // todo: use .encode() if (objectResponse instanceof ObjectResponse.SingleObject) { ObjectResponse.SingleObject singleObject = (ObjectResponse.SingleObject) objectResponse; FullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1, HttpResponseStatus.NO_CONTENT); if (singleObject.fullObjectName.attributes.dir) { response.headers().set(CONTENT_TYPE, "application/x-json-stream; type=directory"); } else { response.headers().set(CONTENT_MD5, singleObject.fullObjectName.attributes.md5); } ctx.writeAndFlush(response).addListener(new GenericFutureListener<ChannelFuture>() { @Override public void operationComplete(ChannelFuture future) throws Exception { if (future.isSuccess()) { log.info("write success"); } else { log.info("write failed: {}", future.cause()); } } }); return; } log.warn("error on handleHEAD: {}", objectRequest, future.cause()); sendError(ctx, ERROR_BAD_REQUEST); } } }); }