天龙八部服务器端共享内存的设计(2/3)
2012-05-12 15:49
246 查看
六、样例分析——玩家角色数据的存储和共享
服务器端玩家角色对于的类型是classObj_Human,里面有角色数据库存储接口的定义:
protected:
//存放所有关于Obj_Human的、从数据库里读取的信息
HumanDB
m_DB;
class HumanDB中拥有内存共享对象指针,以及角色需要存储的数据定义。
private:
//共享内存相关数据
HumanSMU*
m_HumanSMU;
//共享内存数据
HUMAN_DB_ATTR_FLAG*
m_AttrFlag;
//角色属性刷新控制数据
private:
_HUMAN_DB_LOAD*
m_dbHuman
; //角色基本信息
_BAG_DB_LOAD*
m_dbBag
; //角色背包物品信息
_EQUIP_DB_LOAD*
m_dbEquip
; //角色装备信息
_BANK_DB_LOAD*
m_dbBank
; //角色银行物品信息
_SKILL_DB_LOAD*
m_dbSkill
; //角色身上拥有的技能信息
_COOLDOWN_DB_LOAD_FOR_HUMAN*
m_dbCooldown ;
//角色身上的冷却信息
_RELATION_DB_LOAD*
m_dbRelation;
//角色联系人(好友、黑名单)
_ABILITY_DB_LOAD*
m_dbAbility;
//角色学会的生活技能信息以及配方表
_XINFA_DB_LOAD*
m_dbXinFa
; //角色学会的心法信息
_IMPACT_DB_LOAD*
m_dbImpact
; //角色身上所施加的附加效果信息
_MISSION_DB_LOAD*
m_dbMission;
//任务列表
_SETTING_DB_LOAD*
m_dbSetting
; //设置数据
_PRIVATE_INFO_DB_LOAD*
m_dbPrivateInfo;//私人信息
上面这些xxx_LOAD很眼熟,其实在struct
HumanSMU里面有类似定义:
struct
HumanSMU
{
SMUHead
m_SMUHead;
HUMAN_DB_ATTR_FLAG
m_AttrFlag;
//角色属性标志位
_HUMAN_DB_LOAD
m_HumanSM
; //角色基本信息
_BANK_DB_LOAD
m_BankSM
; //角色银行物品信息
_SKILL_DB_LOAD
m_SkillSM
; //角色身上拥有的技能信息
_COOLDOWN_DB_LOAD_FOR_HUMAN
m_CooldownSM ;
//角色身上的冷却信息
_XINFA_DB_LOAD
m_XinFaSM
; //角色学会的心法信息
_IMPACT_DB_LOAD
m_ImpactSM
; //角色身上所施加的附加效果信息
_ABILITY_DB_LOAD
m_AbilitySM;
//角色学会的生活技能信息以及配方表
_MISSION_DB_LOAD
m_MissionSM;
//任务列表
_SETTING_DB_LOAD
m_SettingSM;
//任务列表
_PET_DB_LIST_LOAD
m_PetListSM;
//宠物列表
_BAG_DB_LOAD
m_BagSM;
//角色背包物品信息
_EQUIP_DB_LOAD
m_EquipSM;
//角色装备信息
_RELATION_DB_LOAD
m_RelationSM;
//角色联系人(好友、黑名单)
_PRIVATE_INFO_DB_LOAD
m_PrivateInfoSM;//私人信息
};
再看看HumanDB如何初始化的,看其构造函数(代码太多,删除了一些):
HumanDB::HumanDB(
)
{
//这里获取共享内存存储单元
HumanSMU*
pSMU =
g_HumanSMUPool.NewObj();
m_HumanSMU
=
pSMU;
m_AttrRegSM
=
new
HUMAN_DB_ATTR_REG;
m_AttrReg
=
new
HUMAN_DB_ATTR_REG;
m_AttrFlag
=
new
HUMAN_DB_ATTR_FLAG;
m_dbHuman
=
new
_HUMAN_DB_LOAD ;
//...略过一些对象内存分配
//属性表和DB数据的挂接,用于脏数据判断和数据位置对接
_RegisterDBAttributes();
//属性表和内存共享对象挂接,用于脏数据判断和数据位置对接
_RegisterSMAttributes();
}
1.
Human数据的加载是通过DBCharFullData进行的,检查了一下代码,加载的地方只有两个地方,一个是创建角色的消息响应,另外一个地方是角色登录消息响应,这些都是LonginServer(登录服务器)处理的。
Server\Login\Packets\CLAskCreateCharHander.cpp
Server\Login\Packets\WLRetCharLoginHandler.cpp
角色数据被加载后,发给了WorldServer,又通过WorldServer发送给GameServer。
相关文章推荐
- 天龙八部服务器端共享内存的设计
- 天龙八部服务器端共享内存的设计(1/3)
- 天龙八部服务器端共享内存的设计
- 天龙八部服务器端共享内存的设计(3/3)
- 天龙八部服务器端共享内存的设计(1/3)
- 天龙八部服务器端共享内存的设计(1/3)
- 天龙八部服务器端共享内存的设计
- [转]天龙八部服务器端-共享内存的设计
- 天龙八部服务器端共享内存的设计(3/3)
- 天龙八部服务器端共享内存的设计(2/3)
- 天龙八部服务器端共享内存的设计(2/3)
- 天龙八部服务器端共享内存的设计(3/3)
- 天龙八部服务器端共享内存的设计
- /LGC设计模式/进程间通信之共享内存
- 游戏数据存储设计概述(共享内存)
- 设计模式之享元模式,内存共享模式,Flyweight
- 怎么利用设计模式来更有效的使用共享内存
- ACE框架 基于共享内存的分配器 (算法设计)
- 共享内存的设计