//package com.cisdi.data.emia.gateway.impl;
//
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import com.cisdi.data.common.exception.BusinessException;
//import com.cisdi.data.sdk.enums.ByteOrder;
//import com.cisdi.data.sdk.procotol.message.SocketReturnMessage;
//
//import io.netty.buffer.ByteBuf;
//import io.netty.buffer.Unpooled;
//import io.netty.channel.ChannelHandlerContext;
//import io.netty.handler.codec.MessageToByteEncoder;
//
//public class EmiaProVoEncoder extends MessageToByteEncoder<EmiaProVo> {
//	private ByteOrder byteOrder = ByteOrder.BIGENDIAN;
//
//	public EmiaProVoEncoder(ByteOrder byteOrder) {
//		this.byteOrder = byteOrder;
//	}
//
//	private static final Logger logger = LoggerFactory.getLogger(EmiaProVoEncoder.class);
//
//	private Object lockObj = new Object();
//
//	@Override
//	protected void encode(ChannelHandlerContext ctx, EmiaProVo msg, ByteBuf out) throws Exception {
//		try {
//			if(msg == null) {
//				throw new BusinessException("encode EmiaProVo is null");
//			}
//
//			if(msg.getBody() == null) {
//				throw new BusinessException("消息体为null");
//			}
//
//			synchronized (lockObj) {
//			    if(ByteOrder.LITTLEENDIAN.code().equals(byteOrder.code())) {
//			    	out.writeShortLE(16 + msg.getBody().length);
//			    	out.writeShortLE(msg.getMsgKey() == null ? 0 : Short.valueOf(msg.getMsgKey()));
//			    	out.writeShortLE(0);
//			    	out.writeShortLE(0);
//			    	out.writeIntLE(msg.getDeviceId() == null ? 0 : Integer.valueOf(msg.getDeviceId()));
//			    	out.writeIntLE(msg.getDestDeviceId() == null ? 0 : Integer.valueOf(msg.getDestDeviceId()));
//			    	out.writeBytes(msg.getBody());
//			    }else {
//			    	out.writeShort(16 + msg.getBody().length);
//			    	out.writeShort(msg.getMsgKey() == null ? 0 : Short.valueOf(msg.getMsgKey()));
//			    	out.writeShort(0);
//			    	out.writeShort(0);
//			    	out.writeInt(msg.getDeviceId() == null ? 0 : Integer.valueOf(msg.getDeviceId()));
//			    	out.writeInt(msg.getDestDeviceId() == null ? 0 : Integer.valueOf(msg.getDestDeviceId()));
//			    	out.writeBytes(msg.getBody());
//				}
//			}
//		} catch (Exception e) {
//			logger.warn("编码消息发生异常" + e.getMessage(), e);
//			throw e;
//		}
//	}
//
//	public static byte[] encode(SocketReturnMessage msg, ByteOrder order) {
//		  ByteBuf out = null;
//		  byte[] result = null;
//
//		  try {
//			  out = Unpooled.buffer();
//			  if(ByteOrder.LITTLEENDIAN.code().equals(order.code())) {
//				  out.writeShortLE(16 + msg.getData().length);
//				  out.writeShortLE(msg.getMsgKey() == null ? 0 : Short.valueOf(msg.getMsgKey()));
//				  out.writeShortLE(0);
//				  out.writeShortLE(0);
//				  out.writeIntLE(0);
//				  out.writeIntLE(msg.getDeviceId() == null ? 0 : Integer.valueOf(msg.getDeviceId()));
//				  out.writeBytes(msg.getData());
//			  }else {
//				  out.writeShort(16 + msg.getData().length);
//				  out.writeShort(msg.getMsgKey() == null ? 0 : Short.valueOf(msg.getMsgKey()));
//				  out.writeShort(0);
//				  out.writeShort(0);
//				  out.writeInt(0);
//				  out.writeInt(msg.getDeviceId() == null ? 0 : Integer.valueOf(msg.getDeviceId()));
//				  out.writeBytes(msg.getData());
//			  }
//
//			  result = new byte[out.readableBytes()];
//			  out.readBytes(result);
//		} finally {
//			if(out != null) {
//				out.release();
//			}
//		}
//
//		return result;
//	}
//}