package net.johnewart.gearman.server.net;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;
import net.johnewart.gearman.common.packets.Packet;
import net.johnewart.gearman.constants.GearmanConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ChannelHandler.Sharable
public class Encoder extends MessageToByteEncoder<Object> {
private static Logger LOG = LoggerFactory.getLogger(Encoder.class);
public static Encoder getInstance() {
return InstanceHolder.INSTANCE;
}
public static byte[] encodePacket(Packet packet)
throws IllegalArgumentException {
LOG.debug("<--- " + packet.getType());
return packet.toByteArray();
}
public static byte[] encodeString(String message)
throws IllegalArgumentException {
LOG.debug("<--- " + message);
return message.getBytes(GearmanConstants.CHARSET);
}
@Override
protected void encode(ChannelHandlerContext ctx, Object msg, ByteBuf out) {
if (msg instanceof Packet) {
out.writeBytes(encodePacket((Packet) msg));
} else if (msg instanceof String) {
out.writeBytes(encodeString((String) msg));
} else {
LOG.error("Unable to encode this thing: " + msg);
}
}
private static final class InstanceHolder {
private static final Encoder INSTANCE = new Encoder();
}
}