Search in sources :

Example 1 with Codec

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()));
}
Also used : EncoderException(io.netty.handler.codec.EncoderException) Codec(org.lanternpowered.server.network.message.codec.Codec) MessageToMessageCodec(io.netty.handler.codec.MessageToMessageCodec) MessageRegistration(org.lanternpowered.server.network.message.MessageRegistration) HandlerMessage(org.lanternpowered.server.network.message.HandlerMessage) NullMessage(org.lanternpowered.server.network.message.NullMessage) Message(org.lanternpowered.server.network.message.Message) BulkMessage(org.lanternpowered.server.network.message.BulkMessage) CodecRegistration(org.lanternpowered.server.network.message.CodecRegistration) Protocol(org.lanternpowered.server.network.protocol.Protocol) ByteBuf(io.netty.buffer.ByteBuf) ByteBuffer(org.lanternpowered.server.network.buffer.ByteBuffer) LanternByteBuffer(org.lanternpowered.server.network.buffer.LanternByteBuffer) LanternByteBuffer(org.lanternpowered.server.network.buffer.LanternByteBuffer)

Aggregations

ByteBuf (io.netty.buffer.ByteBuf)1 EncoderException (io.netty.handler.codec.EncoderException)1 MessageToMessageCodec (io.netty.handler.codec.MessageToMessageCodec)1 ByteBuffer (org.lanternpowered.server.network.buffer.ByteBuffer)1 LanternByteBuffer (org.lanternpowered.server.network.buffer.LanternByteBuffer)1 BulkMessage (org.lanternpowered.server.network.message.BulkMessage)1 CodecRegistration (org.lanternpowered.server.network.message.CodecRegistration)1 HandlerMessage (org.lanternpowered.server.network.message.HandlerMessage)1 Message (org.lanternpowered.server.network.message.Message)1 MessageRegistration (org.lanternpowered.server.network.message.MessageRegistration)1 NullMessage (org.lanternpowered.server.network.message.NullMessage)1 Codec (org.lanternpowered.server.network.message.codec.Codec)1 Protocol (org.lanternpowered.server.network.protocol.Protocol)1