package cn.com.ty.lift.ud.neety.protocol;

import org.msgpack.MessagePack;

import com.alibaba.fastjson.JSONObject;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;

import java.util.List;

/**
 * 自定义IM协议的编码器
 */
public class IMEncoder extends MessageToByteEncoder<IMMessage> {

    @Override
    protected void encode(ChannelHandlerContext ctx, IMMessage msg, ByteBuf out) throws Exception {
        out.writeBytes(new MessagePack().write(msg));
    }

    public static String encode(IMMessage msg) {
        if (null == msg) {
            return "";
        }
        String prex = "[" + msg.getCmd() + "]" + "[" + msg.getTime() + "]";
        if (IMP.INITROOM.getName().equals(msg.getCmd()) || IMP.FLOWER.getName().equals(msg.getCmd())) {
            prex += ("[" + msg.getName() + "]");
        } else if (IMP.CHAT.getName().equals(msg.getCmd())) {
            prex += ("[" + msg.getName() + "][" + msg.getAvatarUrl() + "]");
        } else if (IMP.SYSTEM.getName().equals(msg.getCmd())) {
            prex += ("[" + msg.getOnline() + "]");
        }
        if (!(null == msg.getMsg() || "".equals(msg.getMsg()))) {
            prex += (" - " + msg.getMsg());
        }
        return prex;
    }

    /***
     * 文本解析
     * 
     * @param msg
     *            解析文本
     * @param flag
     *            是否本地测试解析（ false:本地测试解析）
     * @return
     */
    public static String toJsonString(IMMessage msg, boolean flag) {
        if (flag) {
            String message = JSONObject.toJSONString(msg);
            return message;
        } else {
            return encode(msg);
        }

    }

}
