package com.snda.mzang.tvtogether.server.handler;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.handler.codec.frame.FrameDecoder;
import org.json.JSONObject;
import com.snda.mzang.tvtogether.base.B;
import com.snda.mzang.tvtogether.server.protocol.CommPackage;
public class ContentDecoder extends FrameDecoder {
@Override
protected Object decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer) throws Exception {
int avaliable = buffer.readableBytes();
if (avaliable < B.MSG_CLIENT_HEADER_LEN) {
return null;
}
int len = buffer.getInt(buffer.readerIndex());
if (avaliable >= len + B.MSG_INT_LEN) {
buffer.readInt();
String type = readType(buffer);
byte[] currContent = new byte[len - B.MSG_HANDLER_NAME_LEN];
buffer.readBytes(currContent);
CommPackage commPackage = new CommPackage();
commPackage.type = type;
commPackage.data = new JSONObject(new String(currContent));
return commPackage;
} else {
return null;
}
}
private static String readType(ChannelBuffer buffer) {
ChannelBuffer typeBytes = buffer.readBytes(B.MSG_HANDLER_NAME_LEN);
String typeStr = new String(typeBytes.array());
return typeStr.trim().toLowerCase();
}
}