Package com.epsilon5.client.network

Source Code of com.epsilon5.client.network.NetworkEncoder

package com.epsilon5.client.network;

import com.google.protobuf.Message;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBufferOutputStream;
import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.handler.codec.oneone.OneToOneEncoder;

import java.io.OutputStream;
import java.util.zip.DeflaterOutputStream;

class NetworkEncoder extends OneToOneEncoder {

    private static final int HEADER_SIZE = 9;

    @Override
    protected Object encode(ChannelHandlerContext ctx, Channel channel, Object msg)
            throws Exception {

        final Message message = (Message) msg;
        final byte[] data = message.toByteArray();
        final ChannelBuffer buffer = ChannelBuffers.dynamicBuffer();

        buffer.writeByte(PacketType.fromMessage(message).ordinal());
        buffer.writeShort(data.length);
        buffer.writeShort(0);
        buffer.writeInt(0);

        try (OutputStream stream = new DeflaterOutputStream(new ChannelBufferOutputStream(buffer))) {
            stream.write(data);
        }

        buffer.setShort(3, buffer.readableBytes() - HEADER_SIZE + 4);
        buffer.setInt(5, buffer.readableBytes() - HEADER_SIZE);

        return buffer;
    }

}
TOP

Related Classes of com.epsilon5.client.network.NetworkEncoder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.