/// <summary> /// 加载英雄数据 /// </summary> /// <param name="sAccount"></param> /// <param name="sCharName"></param> /// <param name="sStr"></param> /// <param name="nCertCode"></param> /// <param name="HumanRcd"></param> /// <returns></returns> public unsafe static bool LoadHeroRcd(string sAccount, string sCharName, string sStr, int nCertCode, THumDataInfo *HumanRcd) { bool result; TDefaultMessage DefMsg; int nQueryID = 0; int nIdent = 0; int nRecog = 0; string sHumanRcdStr = string.Empty; string sDBMsg = string.Empty; string sDBCharName; nQueryID = GetQueryID(M2Share.g_Config); DefMsg = EncryptUnit.MakeDefaultMsg(Common.DB_LOADHERORCD, 0, 0, 0, 0, 0); TLoadHuman LoadHuman = new TLoadHuman(); LoadHuman.sAccount = sAccount; LoadHuman.sChrName = sCharName; LoadHuman.sUserAddr = sStr; LoadHuman.nSessionID = nCertCode; byte[] data = HUtil32.StructToBytes(LoadHuman); sDBMsg = EncryptUnit.EncodeMessage(DefMsg) + EncryptUnit.EncodeBuffer(data, Marshal.SizeOf(LoadHuman)); SendDBSockMsg(nQueryID, sDBMsg); if (GetDBSockMsg(nQueryID, ref nIdent, ref nRecog, ref sHumanRcdStr, M2Share.g_Config.dwGetDBSockMsgTime, true, "LoadHeroRcd(" + sAccount + "/" + sCharName + ")")) { result = false; if (nIdent == Common.DB_LOADHERORCD) { if (nRecog == 1) { sHumanRcdStr = HUtil32.GetValidStr3(sHumanRcdStr, ref sDBMsg, new string[] { "/" }); sDBCharName = EncryptUnit.DeCodeString(sDBMsg); if (sDBCharName == sCharName) { if (HUtil32.GetCodeMsgSize(sizeof(THumDataInfo) * 4 / 3) == sHumanRcdStr.Length) { EncryptUnit.DecodeBuffer(sHumanRcdStr, HumanRcd, sizeof(THumDataInfo)); result = true; } } else { result = false; } } else { result = false; } } else { result = false; } } else { result = false; } return(result); }
static unsafe void socket_ReceivedDatagram(object sender, NetFramework.DSCClientDataInEventArgs e) { var HumanRcd = new THumDataInfo(); int a = 0, b = 0; string c = string.Empty; GetDBSockMsg(e.Data, 0, ref a, ref b, ref c, 0, true, ""); string sDBMsg = string.Empty; c = HUtil32.GetValidStr3(c, ref sDBMsg, new string[] { "/" }); int DataSize = Marshal.SizeOf(HumanRcd); MyTestInfo testinfo = new MyTestInfo(); EncryptUnit.DecodeBuffer(c, ref HumanRcd); //TUserItem* bbbbbbbb= (TUserItem*)testinfo.UserItem; }
static unsafe void socket_ReceivedDatagram(object sender, NetFramework.DSCClientDataInEventArgs e) { var HumanRcd = new THumDataInfo(); int a = 0, b = 0; string c = string.Empty; GetDBSockMsg(e.Data, 0, ref a, ref b, ref c, 0, true, ""); string sDBMsg = string.Empty; c = HUtil32.GetValidStr3(c, ref sDBMsg, new string[] { "/" }); int DataSize = Marshal.SizeOf(HumanRcd); if (HUtil32.GetCodeMsgSize(DataSize * 4 / 3) == c.Length) { EncryptUnit.DecodeBuffer <THumDataInfo>(c, ref HumanRcd); } //if (HumanRcd.Data.BagItems[0] != null) //{ // TUserItem hun = new TUserItem(); // int HumSize = Marshal.SizeOf(hun); //} }
/// <summary> /// 保存角色数据 /// </summary> /// <param name="nRecog"></param> /// <param name="sMsg"></param> private unsafe void SaveHumanRcd(int nRecog, string sMsg) { string sChrName = string.Empty; string sUserID = string.Empty; string sHumanRCD = string.Empty; int I; int nIndex; bool bo21; TDefaultMessage DefMsg; THumDataInfo * HumanRCD; THumDataInfo HumDataInfo; sHumanRCD = HUtil32.GetValidStr3(sMsg, ref sUserID, new string[] { "/" }); sHumanRCD = HUtil32.GetValidStr3(sHumanRCD, ref sChrName, new string[] { "/" }); sUserID = EncryptUnit.DeCodeString(sUserID); sChrName = EncryptUnit.DeCodeString(sChrName); bo21 = false; HumanRCD = (THumDataInfo *)Marshal.AllocHGlobal(sizeof(THumDataInfo)); HUtil32.ZeroMemory((IntPtr)(&HumanRCD->Data), (IntPtr)sizeof(THumData)); int THumDataInfoLength = DBShare.GetCodeMsgSize(sizeof(THumDataInfo) * 4 / 3) + 1; if (sHumanRCD.Length == THumDataInfoLength) { EncryptUnit.DecodeBuffer(sHumanRCD, HumanRCD, sizeof(THumDataInfo)); } else { bo21 = true; } if (!bo21) { bo21 = true; try { HumDataInfo = DBShare.g_HumDataDB.Get(sChrName); //nIndex = DBShare.g_HumDataDB.Index(sChrName); if (HumDataInfo.Header.NameLen <= 0) { HumanRCD->Header.boDeleted = false; HumanRCD->Header.dCreateDate = DateTime.Now.ToOADate(); //sChrName.StrToSbyte(HumanRCD->Header.sName, 15,ref HumanRCD->Header.NameLen); HumanRCD->Header.sName = sChrName; HumanRCD->Header.boIsHero = false; DBShare.g_HumDataDB.Add(ref *HumanRCD); //nIndex = DBShare.g_HumDataDB.Index(sChrName); } HumDataInfo = DBShare.g_HumDataDB.Get(sChrName); if (HumDataInfo.Header.NameLen > 0) { HumanRCD->Header = HumDataInfo.Header; DBShare.g_HumDataDB.Update(sChrName, ref *HumanRCD); bo21 = false; DBShare.g_nSaveHumCount++; } } catch (Exception ex) { MessageBox.Show(ex.Message); } FrmIDSoc.SetSessionSaveRcd(sUserID); } if (!bo21) { m_DefMsg = EncryptUnit.MakeDefaultMsg(Common.DBR_SAVEHUMANRCD, 1, 0, 0, 0); SendSocket(EncryptUnit.EncodeMessage(m_DefMsg)); } else { m_DefMsg = EncryptUnit.MakeDefaultMsg(Common.DBR_LOADHUMANRCD, 0, 0, 0, 0); SendSocket(EncryptUnit.EncodeMessage(m_DefMsg)); DBShare.MainOutMessage("SaveHumanRcd Fail,UserID:sUserID,ChrName:sChrName"); } }
/// <summary> /// 载入角色记录 /// </summary> /// <param name="sMsg"></param> private unsafe void LoadHumanRcd(string sMsg) { string sHumName; string sAccount; string sIPaddr; int nSessionID; int nCheckCode; THumDataInfo HumanRCD; bool boFoundSession = false; TLoadHuman * pLoadHuman; pLoadHuman = (TLoadHuman * )Marshal.AllocHGlobal(sizeof(TLoadHuman)); EncryptUnit.DecodeBuffer(sMsg, pLoadHuman, sizeof(TLoadHuman)); sAccount = HUtil32.SBytePtrToString(pLoadHuman->sAccount, 0, 30).TrimEnd('\0'); sHumName = HUtil32.SBytePtrToString(pLoadHuman->sChrName, 0, 14).TrimEnd('\0'); sIPaddr = HUtil32.SBytePtrToString(pLoadHuman->sUserAddr, 0, 15).TrimEnd('\0'); nSessionID = pLoadHuman->nSessionID; nCheckCode = -1; if ((sAccount != "") && (sHumName != "")) { if ((FrmIDSoc.CheckSessionLoadRcd(sAccount, sIPaddr, nSessionID, ref boFoundSession))) { nCheckCode = 1; } else { if (boFoundSession) { DBShare.MainOutMessage("[非法重复请求] " + "帐号: " + sAccount + " IP: " + sIPaddr + " 标识: " + (nSessionID).ToString()); } else { DBShare.MainOutMessage("[非法请求] " + "帐号: " + sAccount + " IP: " + sIPaddr + " 标识: " + (nSessionID).ToString()); } // nCheckCode:= 1; //测试用,正常去掉 } } if (nCheckCode == 1) { try { HumanRCD = DBShare.g_HumDataDB.Get(sHumName); if (HumanRCD.Header.NameLen > 0) { if (HumanRCD.Header.NameLen < 0) { nCheckCode = -2; } } else { nCheckCode = -3; } }catch { nCheckCode = -4; } } if (nCheckCode == 1) { DBShare.g_nLoadHumCount++; m_DefMsg = EncryptUnit.MakeDefaultMsg(Common.DBR_LOADHUMANRCD, 1, 0, 0, 1); SendSocket(EncryptUnit.EncodeMessage(m_DefMsg) + EncryptUnit.EncodeString(sHumName) + '/' + EncryptUnit.EncodeBuffer(&HumanRCD, sizeof(THumDataInfo))); } else { m_DefMsg = EncryptUnit.MakeDefaultMsg(Common.DBR_LOADHUMANRCD, nCheckCode, 0, 0, 0); SendSocket(EncryptUnit.EncodeMessage(m_DefMsg)); } }