// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.protocol.io.netty;

import com.hypixel.hytale.protocol.io.PacketIO;
import com.hypixel.hytale.protocol.io.PacketStatsRecorder;
import com.hypixel.hytale.protocol.CachedPacket;
import io.netty.buffer.ByteBuf;
import javax.annotation.Nonnull;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelHandler;
import com.hypixel.hytale.protocol.Packet;
import io.netty.handler.codec.MessageToByteEncoder;

@ChannelHandler.Sharable
public class PacketEncoder extends MessageToByteEncoder<Packet>
{
    @Override
    protected void encode(@Nonnull final ChannelHandlerContext ctx, @Nonnull final Packet packet, @Nonnull final ByteBuf out) {
        Class<? extends Packet> packetClass;
        if (packet instanceof CachedPacket) {
            final CachedPacket<?> cached = (CachedPacket<?>)packet;
            packetClass = (Class<? extends Packet>)cached.getPacketType();
        }
        else {
            packetClass = packet.getClass();
        }
        PacketStatsRecorder statsRecorder = ctx.channel().attr(PacketStatsRecorder.CHANNEL_KEY).get();
        if (statsRecorder == null) {
            statsRecorder = PacketStatsRecorder.NOOP;
        }
        PacketIO.writeFramedPacket(packet, packetClass, out, statsRecorder);
    }
}
