package org.infinispan.server.hotrod;
import org.infinispan.commons.logging.LogFactory;
import org.infinispan.server.hotrod.logging.Log;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.Channel;
import io.netty.util.CharsetUtil;
/**
* Static helper to provide common way of writing response to channel
*
* @author wburns
* @since 9.0
*/
public class ResponseWriting {
private ResponseWriting() {
}
private final static Log log = LogFactory.getLog(ContextHandler.class, Log.class);
/**
* Writes the response to the channel
*
* @param ctx
* @param ch
* @param response
*/
public static void writeResponse(CacheDecodeContext ctx, Channel ch, Object response) {
if (response != null) {
if (CacheDecodeContext.isTrace) {
log.tracef("Write response %s", response);
}
if (response instanceof Response) {
ch.writeAndFlush(response);
} else if (response instanceof ByteBuf[]) {
for (ByteBuf buf : (ByteBuf[]) response) {
ch.write(buf);
}
ch.flush();
} else if (response instanceof byte[]) {
ch.writeAndFlush(Unpooled.wrappedBuffer((byte[]) response));
} else if (response instanceof CharSequence) {
ch.writeAndFlush(Unpooled.copiedBuffer((CharSequence) response, CharsetUtil.UTF_8));
} else {
ch.writeAndFlush(response);
}
}
}
}