public UpdatePatch(byte[] packet)
 {
     msg         = new Message(packet, (uint)packet.Length);
     mPacketbody = msg.m_packet.m_Body;
 }
        /// <summary>
        /// 查看该玩家是否被激活
        /// </summary>
        /// <returns></returns>
        public Message O2JAM2_AccountActive_Query()
        {
            System.Data.DataSet result = null;
            int    status   = -1;
            string serverIP = null;
            string account  = null;
            string passwd   = null;
            string number   = null;

            try
            {
                //serverIP = System.Text.Encoding.Default.GetString(msg.m_packet.m_Body.getTLVByTag(TagName.CR_ServerIP).m_bValueBuffer);
                //  account = System.Text.Encoding.Default.GetString(msg.m_packet.m_Body.getTLVByTag(TagName.CR_ACCOUNT).m_bValueBuffer);
                passwd = account = System.Text.Encoding.Default.GetString(msg.m_packet.m_Body.getTLVByTag(TagName.O2JAM2_Id2).m_bValueBuffer);
                number = System.Text.Encoding.Default.GetString(msg.m_packet.m_Body.getTLVByTag(TagName.O2JAM2_Id1).m_bValueBuffer);
                SqlHelper.log.WriteLog(lg.API_Display + lg.O2JAM2API_BAF + "+>" + lg.API_CommonAPI_ServerIP + CommonInfo.serverIP_Query(serverIP) + lg.O2JAM2API_AccountInfoAPI_Account + account + lg.O2JAM2API_AccountInfoAPI_ActiveState);
                Console.WriteLine(DateTime.Now + " - " + lg.API_Display + lg.O2JAM2API_BAF + "+>" + lg.API_CommonAPI_ServerIP + CommonInfo.serverIP_Query(serverIP) + lg.O2JAM2API_AccountInfoAPI_Account + account + lg.O2JAM2API_AccountInfoAPI_ActiveState);
                result = AccountInfo.O2JAM2_AccountActive_Query(account, passwd, number);
                if (result != null && result.Tables[0].Rows.Count > 0)
                {
                    //密码错误
                    if (!result.Tables[0].Rows[0].ItemArray[3].Equals(passwd))
                    {
                        status = 2;
                        byte[]        bgMsg_Status = TLV_Structure.ValueToByteArray(TagFormat.TLV_INTEGER, status);
                        TLV_Structure Msg_Status   = new TLV_Structure(TagName.O2JAM2_Status, (uint)bgMsg_Status.Length, bgMsg_Status);
                        byte[]        baMsg_Pass   = TLV_Structure.ValueToByteArray(TagFormat.TLV_STRING, result.Tables[0].Rows[0].ItemArray[3]);
                        TLV_Structure Msg_Pass     = new TLV_Structure(TagName.O2JAM2_Id2, (uint)baMsg_Pass.Length, baMsg_Pass);
                        Packet_Body   body         = new Packet_Body(new TLV_Structure[] { Msg_Status, Msg_Pass }, 2);
                        Packet_Head   head         = new Packet_Head(SeqID_Generator.Instance().GetNewSeqID(), Msg_Category.O2JAM2_ADMIN,
                                                                     ServiceKey.O2JAM2_ACCOUNTACTIVE_QUERY_RESP, body.m_uiBodyLen);
                        return(new Message(new Packet(head, body)));
                    }
                    //激活码未被使用过
                    else if (Convert.ToInt32(result.Tables[0].Rows[0].ItemArray[5].ToString()) == 0)
                    {
                        status = 3;
                        return(Message.COMMON_MES_RESP(status, Msg_Category.O2JAM2_ADMIN, ServiceKey.O2JAM2_ACCOUNTACTIVE_QUERY_RESP, TagName.CR_STATUS, TagFormat.TLV_INTEGER));
                    }
                    // 激活码已被使用
                    else if (Convert.ToInt32(result.Tables[0].Rows[0].ItemArray[5].ToString()) == 1)
                    {
                        status = 4;
                        byte[]        bgMsg_Status  = TLV_Structure.ValueToByteArray(TagFormat.TLV_INTEGER, status);
                        TLV_Structure Msg_Status    = new TLV_Structure(TagName.O2JAM2_Status, (uint)bgMsg_Status.Length, bgMsg_Status);
                        byte[]        baMsg_Account = TLV_Structure.ValueToByteArray(TagFormat.TLV_STRING, UserValidate.validData(result.Tables[0].Rows[0].ItemArray[1]));
                        TLV_Structure Msg_Account   = new TLV_Structure(TagName.O2JAM2_UserName, (uint)baMsg_Account.Length, baMsg_Account);
                        Packet_Body   body          = new Packet_Body(new TLV_Structure[] { Msg_Status, Msg_Account }, 2);
                        Packet_Head   head          = new Packet_Head(SeqID_Generator.Instance().GetNewSeqID(), Msg_Category.O2JAM2_ADMIN,
                                                                      ServiceKey.O2JAM2_ACCOUNTACTIVE_QUERY_RESP, body.m_uiBodyLen);
                        return(new Message(new Packet(head, body)));
                    }
                    else
                    {
                        return(Message.COMMON_MES_RESP(1, Msg_Category.O2JAM2_ADMIN, ServiceKey.O2JAM2_ACCOUNTACTIVE_QUERY_RESP, TagName.O2JAM2_Status, TagFormat.TLV_INTEGER));
                    }

                    /*// 查询帐号未被激活
                     * else if (!result.Tables[0].Rows[0].ItemArray[3].Equals(account))
                     * {
                     *  status = 5;
                     * }
                     * // 查询帐号已被激活
                     * else if (result.Tables[0].Rows[0].ItemArray[3].Equals(account))
                     * {
                     *  status = 6;
                     * }*/
                }
                return(Message.COMMON_MES_RESP(1, Msg_Category.O2JAM2_ADMIN, ServiceKey.O2JAM2_ACCOUNTACTIVE_QUERY_RESP, TagName.O2JAM2_Status, TagFormat.TLV_INTEGER));
            }
            catch (System.Exception)
            {
                return(Message.COMMON_MES_RESP(1, Msg_Category.O2JAM2_ADMIN, ServiceKey.O2JAM2_ACCOUNTACTIVE_QUERY_RESP, TagName.O2JAM2_Status, TagFormat.TLV_INTEGER));
            }
        }
		/// <summary>
		/// 封装用户列表的消息包
		/// </summary>
		/// <returns>完整的消息包</returns>
		public static byte[] PackUserListMsg(int userID)
		{
			string[] userName ;
			string[] passWd;
			string[] MAC;
			int iCurrPos = 0;
			int iDetailLen = 0;
			byte[] bDetail = new byte[128];

			//调用UserInfo类的函数,把用户表数据读出来存入DATASET里面
			DataSet ds = GMUserInfo.SelectAll(userID);
            userName = new string[ds.Tables[0].Rows.Count];
			passWd = new string[ds.Tables[0].Rows.Count];
			MAC = new string[ds.Tables[0].Rows.Count];

			//遍历用户表所有数据,把用户名、密码、MAC存入Byte数组里面
			//iCurrPos记录Byte数组的位置
			for(int i=0;i<ds.Tables[0].Rows.Count;i++)
			{
				userName[i] = ds.Tables[0].Rows[i][1].ToString();
				passWd[i] = ds.Tables[0].Rows[i][2].ToString();
				MAC[i] = ds.Tables[0].Rows[i][3].ToString();
				byte[] bTmpUserName = System.Text.Encoding.Default.GetBytes(userName[i]);
				Array.Copy(bTmpUserName,0,bDetail,iCurrPos,bTmpUserName.Length);
                iCurrPos+=bTmpUserName.Length;

				byte[] bTmpPassWord = System.Text.Encoding.Default.GetBytes(passWd[i]);
				Array.Copy(bTmpPassWord,0,bDetail,iCurrPos,bTmpPassWord.Length);
				iCurrPos+=bTmpPassWord.Length;

				byte[] bTmpMac = System.Text.Encoding.Default.GetBytes(MAC[i]);
				Array.Copy(bTmpMac,0,bDetail,iCurrPos,bTmpMac.Length);
				iCurrPos+=bTmpMac.Length;

			}
			//得到消息包的长度
			iDetailLen = iCurrPos;
			//截取多余Byte空间
			byte[] detailMsg = Packet_Body.getPacketBody(bDetail);
			byte[] bHead = new byte[16+ds.Tables[0].Rows.Count*3+iDetailLen];
			iCurrPos = 0;
			//创建序列号ID
			bHead[iCurrPos++]=System.Convert.ToByte(iSequenceID&255);
			bHead[iCurrPos++]=System.Convert.ToByte((iSequenceID&65280)>>8);
			bHead[iCurrPos++]=System.Convert.ToByte((iSequenceID&16711680)>>16);
			bHead[iCurrPos++]=System.Convert.ToByte((iSequenceID&4278190080)>>32);
			//消息类型
			bHead[iCurrPos++]=0x82;

			//保留地址
			bHead[iCurrPos++]=0x80;

			//服务健是REQUEST还是RESP
			bHead[iCurrPos++]=0x01;
			bHead[iCurrPos++]=0x00;

            //定义消息体数据的长度,把它存在消息头里面,如果数据是多行的话就循环存储长度
			for(int i=0;i<ds.Tables[0].Rows.Count;i++)
			{
				bHead[iCurrPos++]=Convert.ToByte(userName[i].Length);
				bHead[iCurrPos++]=Convert.ToByte(passWd[i].Length);
				bHead[iCurrPos++]=Convert.ToByte(MAC[i].Length);
			}

			//消息创建日期
			System.DateTime dt = System.DateTime.Now;
			bHead[iCurrPos++]=System.Convert.ToByte(dt.Year-1900);
			bHead[iCurrPos++]=System.Convert.ToByte(dt.Month);
			bHead[iCurrPos++]=System.Convert.ToByte(dt.Day);
			bHead[iCurrPos++]=System.Convert.ToByte(dt.Hour);
			bHead[iCurrPos++]=System.Convert.ToByte(dt.Minute);
			bHead[iCurrPos++]=System.Convert.ToByte(dt.Second);
			iSequenceID++;
			bHead[iCurrPos++]=System.Convert.ToByte(detailMsg.Length&255);
			bHead[iCurrPos++]=System.Convert.ToByte((detailMsg.Length&65280)>>8);

            //把消息头和消息体组成一个消息包
			Array.Copy(bDetail,0,bHead,iCurrPos,detailMsg.Length);
			
			return bHead;
		}