public <T> void writeRequest(NettyResponseFuture<T> future, Channel channel) { NettyRequest nettyRequest = future.getNettyRequest(); HttpRequest httpRequest = nettyRequest.getHttpRequest(); AsyncHandler<T> handler = future.getAsyncHandler(); // if the channel is dead because it was pooled and the remote // server decided to close it, // we just let it go and the channelInactive do its work if (!Channels.isChannelValid(channel)) return; try { if (handler instanceof TransferCompletionHandler) configureTransferAdapter(handler, httpRequest); boolean writeBody = !future.isDontWriteBodyBecauseExpectContinue() && httpRequest.getMethod() != HttpMethod.CONNECT && nettyRequest.getBody() != null; if (!future.isHeadersAlreadyWrittenOnContinue()) { if (future.getAsyncHandler() instanceof AsyncHandlerExtensions) AsyncHandlerExtensions.class.cast(future.getAsyncHandler()).onRequestSend(nettyRequest); ChannelProgressivePromise promise = channel.newProgressivePromise(); ChannelFuture f = writeBody ? channel.write(httpRequest, promise) : channel.writeAndFlush(httpRequest, promise); f.addListener(new ProgressListener(future.getAsyncHandler(), future, true, 0L)); } if (writeBody) nettyRequest.getBody().write(channel, future); // don't bother scheduling read timeout if channel became invalid if (Channels.isChannelValid(channel)) scheduleReadTimeout(future); } catch (Exception e) { LOGGER.error("Can't write request", e); abort(channel, future, e); } }
void success() { if (promise.isDone()) { // No need to notify the progress or fulfill the promise because it's done already. return; } if (promise instanceof ChannelProgressivePromise) { // Now we know what the total is. ((ChannelProgressivePromise) promise).tryProgress(progress, progress); } promise.trySuccess(); }
void success() { if (promise instanceof ChannelProgressivePromise) { // Now we know what the total is. ((ChannelProgressivePromise) promise).tryProgress(progress, progress); } promise.setSuccess(); }
@Override public ChannelProgressivePromise newProgressivePromise() { return null; }
@Override public ChannelProgressivePromise newProgressivePromise() { // TODO Auto-generated method stub return null; }
@Override public ChannelProgressivePromise newProgressivePromise() { return ctx.newProgressivePromise(); }
void progress(int amount) { progress += amount; if (promise instanceof ChannelProgressivePromise) { ((ChannelProgressivePromise) promise).tryProgress(progress, -1); } }
@Override public ChannelProgressivePromise newProgressivePromise() { return new DefaultChannelProgressivePromise(channel); }