Package org.sdnplatform.sync.internal.rpc

Source Code of org.sdnplatform.sync.internal.rpc.ThriftFrameDecoder

package org.sdnplatform.sync.internal.rpc;

import java.util.ArrayList;
import java.util.List;

import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.transport.TIOStreamTransport;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBufferInputStream;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.handler.codec.frame.LengthFieldBasedFrameDecoder;
import org.sdnplatform.sync.thrift.SyncMessage;

/**
* Decode a {@link SyncMessage} from the channel
* @author readams
*/
public class ThriftFrameDecoder extends LengthFieldBasedFrameDecoder {

    public ThriftFrameDecoder(int maxSize) {
        super(maxSize, 0, 4, 0, 4);
    }

    @Override
    protected Object decode(ChannelHandlerContext ctx,
                            Channel channel,
                            ChannelBuffer buffer) throws Exception {
        List<SyncMessage> ms = null;
        ChannelBuffer frame = null;
        while (null != (frame = (ChannelBuffer) super.decode(ctx, channel,
                                                             buffer))) {
            if (ms == null) ms = new ArrayList<SyncMessage>();
            ChannelBufferInputStream is = new ChannelBufferInputStream(frame);
            TCompactProtocol thriftProtocol =
                    new TCompactProtocol(new TIOStreamTransport(is));
            SyncMessage bsm = new SyncMessage();
            bsm.read(thriftProtocol);
            ms.add(bsm);
        }
        return ms;
    }

    @Override
    protected ChannelBuffer extractFrame(ChannelBuffer buffer,
                                         int index, int length) {
        return buffer.slice(index, length);
    }
}
TOP

Related Classes of org.sdnplatform.sync.internal.rpc.ThriftFrameDecoder

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.