package com.muchinfo.mtp3common.vo;


import com.muchinfo.mtp3common.utils.PropertyUtils;
import com.muchinfo.mtp3common.vo.ConvertHelper;
import org.apache.http.util.ByteArrayBuffer;

/**
 * MTP 协议辅助类
 *
 * @author Administrator
 *
 */
public class ProtoHelper {

	/**
	 * 为google Proto体添加NTAS协议头并返回
	 * 管理端发送
	 * @param protoBody
	 * @param funCode
	 * @param sessionId
	 * @return
	 */
	public static byte[] getNTAS(byte[] protoBody, int funCode) {
		//return getNTAS(protoBody,funCode,sessionId,true);
		ByteArrayBuffer buff = new ByteArrayBuffer(protoBody.length + 8);
        buff.append(ConvertHelper.intToByteArray(funCode), 0, 4); // 设置funCode
        buff.append(ConvertHelper.intToByteArray(PropertyUtils.serverId), 0, 4); // 设置sessionId
        buff.append(protoBody, 0, protoBody.length); // 设置googlebuf数据体
        return buff.toByteArray();
	}
	
	/**
	 * 为google Proto体添加NTAS协议头并返回
	 * 查询服务
	 * @param protoBody
	 * @param funCode
	 * @param sessionId
	 * @return
	 */
	public static byte[] getNTAS(byte[] protoBody, int funCode, int sessionId) {
		//return getNTAS(protoBody,funCode,sessionId,true);
		ByteArrayBuffer buff = new ByteArrayBuffer(protoBody.length + 8);
        buff.append(ConvertHelper.intToByteArray(funCode), 0, 4); // 设置funCode
        buff.append(ConvertHelper.intToByteArray(sessionId), 0, 4); // 设置sessionId
        buff.append(protoBody, 0, protoBody.length); // 设置googlebuf数据体
        return buff.toByteArray();
	}
	/**
	 * 为google Proto体添加NTAS协议头并返回
	 *
	 * @param protoBody
	 * @param funCode
	 * @param sessionId
	 * @param type 是否需要包含serverId,false-不包含 true-包含
	 * @return
	 */
	public static byte[] getNTAS(byte[] protoBody, int funCode, int sessionId,boolean type) {
		//高6位数
		int top = (sessionId >> 26)<<26;
		//低21位
		int tempSessionId = (sessionId << 11)>>11;
		//中6-11位(服务ID标志位)
		int serverId = Integer.parseInt(PropertyUtils.getValue("serverid"));
		int tempServerId = (serverId<<21);
		if(type){
			sessionId =top+tempServerId+tempSessionId;
		}else{
			sessionId =top+tempSessionId;
		}
		ByteArrayBuffer buff = new ByteArrayBuffer(protoBody.length + 8);
		buff.append(ConvertHelper.intToByteArray(funCode), 0, 4); // 设置funCode
		buff.append(ConvertHelper.intToByteArray(sessionId), 0, 4); // 设置sessionId
		buff.append(protoBody, 0, protoBody.length); // 设置googlebuf数据体
		return buff.toByteArray();
	}

	/**
	 * 获取NTAS协议的google Proto协议体部分
	 *
	 * @param body
	 * @return
	 */
	public static byte[] getProtoForNTAS(byte[] body) {
		byte[] msgBody = new byte[body.length - 8];
		System.arraycopy(body, 8, msgBody, 0, msgBody.length);
		return msgBody;
	}

	/**
	 * 获取NTAS协议的功能码
	 *
	 * @param body
	 * @return
	 */
	public static int getFunCodeForNTAS(byte[] body) {
		int funCode = ConvertHelper.byteArrayToInt(body);
		return funCode;
	}
	
	 /**
     * 获取NTAS协议的SessionId
     * 
     * @param body
     * @return
     */
    public static int getSessionIdForNTAS(byte[] body) {
        int funCode = ConvertHelper.byteArrayToInt(body, 4);
        return funCode;
    }

	/**
	 * 获取NTAS协议的SessionId
	 *
	 * @param body
	 * @return
	 */
//	public static int getSessionIdForNTAS(byte[] body) {
//		int sessionId = ConvertHelper.byteArrayToInt(body, 4);
//		//高6位
//		int top = (sessionId >> 26)<<26;
//		//低21位
//		int tempSessionId = (sessionId << 11)>>11;
//		return top + tempSessionId;
//	}

	public static int getServerIdForNTAS(byte[] body) {
		int sessionId = ConvertHelper.byteArrayToInt(body, 4);
//		int tempServerId = (sessionId << 6)>>27;
		return sessionId;
	}

//	public static int getOriginalSessionForNTAS(byte[] body) {
//		int sessionId = ConvertHelper.byteArrayToInt(body, 4);
//		return sessionId;
//	}
}
