in src/main/java/com/twitter/http2/HttpStreamEncoder.java [89:123]
private ChannelPromise getMessageFuture(
final ChannelHandlerContext ctx,
final ChannelPromise promise,
final int streamId,
HttpMessage message
) {
if (message instanceof StreamedHttpMessage
&& !((StreamedHttpMessage) message).getContent().isClosed()) {
final Pipe<HttpContent> pipe = ((StreamedHttpMessage) message).getContent();
ChannelPromise writeFuture = ctx.channel().newPromise();
writeFuture.addListener(new ChannelFutureListener() {
@Override
public void operationComplete(ChannelFuture future) throws Exception {
// Channel's thread
// First frame has been written
if (future.isSuccess()) {
pipe.receive().addListener(
new ChunkListener(ctx, streamId, pipe, promise));
} else if (future.isCancelled()) {
pipe.close();
promise.cancel(true);
} else {
pipe.close();
promise.setFailure(future.cause());
}
}
});
return writeFuture;
} else {
return promise;
}
}