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; }