use of org.lanternpowered.server.network.message.codec.Codec in project LanternServer by LanternPowered.
the class MessageCodecHandler method encode.
@Override
protected void encode(ChannelHandlerContext ctx, Message message, List<Object> output) throws Exception {
final Protocol protocol = this.codecContext.getSession().getProtocol();
final MessageRegistration<Message> registration = (MessageRegistration<Message>) protocol.outbound().findByMessageType(message.getClass()).orElse(null);
if (registration == null) {
throw new EncoderException("Message type (" + message.getClass().getName() + ") is not registered!");
}
CodecRegistration codecRegistration = registration.getCodecRegistration().orElse(null);
if (codecRegistration == null) {
throw new EncoderException("Message type (" + message.getClass().getName() + ") is not registered to allow encoding!");
}
/*
if (message instanceof MessagePlayOutWorldTime ||
message instanceof MessageInOutKeepAlive) {
} else {
System.out.println(message.getClass().getName());
}
*/
final ByteBuf opcode = ctx.alloc().buffer();
// Write the opcode of the message
writeVarInt(opcode, codecRegistration.getOpcode());
final Codec codec = codecRegistration.getCodec();
final ByteBuffer content;
try {
content = codec.encode(this.codecContext, message);
} finally {
ReferenceCountUtil.release(message);
}
// Add the buffer to the output
output.add(Unpooled.wrappedBuffer(opcode, ((LanternByteBuffer) content).getDelegate()));
}
Aggregations