private void writeResponse(ChannelHandlerContext ctx, Response response, ChannelPromise promise) {
if (!response.headers().contains(HttpHeaderNames.CONTENT_TYPE)) {
response.headers().set(HttpHeaderNames.CONTENT_TYPE, "text/plain; charset=UTF-8");
}
Http2MessageSession messageSession = lazyCreateSession(ctx);
int streamId = response.streamId();
Http2Headers headers = response.headers().http2Headers();
headers.status(response.status().codeAsText());
if (response instanceof FullResponse) {
messageSession.onOutboundResponse(response);
ByteBuf body = response.body();
if (body != null && body.readableBytes() > 0) {
PromiseCombiner combiner = new PromiseCombiner();
combiner.add(ctx.write(Http2Response.build(streamId, headers, false), ctx.newPromise()));
Http2DataFrame data = new DefaultHttp2DataFrame(body, true);
combiner.add(ctx.write(Http2Response.build(streamId, data, true), ctx.newPromise()));
combiner.finish(promise);
} else {
ctx.write(Http2Response.build(streamId, headers, true), promise);
}
} else {
ctx.write(Http2Response.build(streamId, headers, false), promise);
}
messageSession.flush(streamId);
}