注册
Unity3d:CreateAccount
Loginapp:reqCreateAccount
-> dbmgr:reqCreateAccount
-> Loginapp:onReqCreateAccountResult
-> Client:onReqCreateAccountResult
登录 Step1
Unity3d:login
Loginapp:login
-> dbmgr:onAccountLogin //检查登录 将登录结果返回给Loginapp
-> Loginapp:onLoginAccountQueryResultFromDbmgr //转发给BaseappMgr分配Baseapp
-> BaseappMgr:registerPendingAccountToBaseapp //将客户端分配到当前负载最低的Baseapp上 并返回该Baseapp的Ip Port
-> onLoginAccountQueryBaseappAddrFromBaseappmgr //将Baseapp的Ip Port转发给客户端
-> Client:onLoginSuccessfully
登录 Step2
Unity3d:loginGateway //尝试在指定Baseapp上登录
Baseapp:loginGateway //检查登录 处理重复登录 向数据库查询账号详细信息
dbmgr:queryAccount //查询账号详细信息 返回给Baseapp
Baseapp:onQueryAccountCBFromDbmgr //创建账号的Proxy并传入客户端的mailbox(用于和客户端交互),Demo中的Account.py即继承于KBEngine.Proxy。
获角 选角 创角
Unity3d的reqAvatarList
selectAvatarGame
reqCreateAvatar
都将直接转到Account.py中对应的相应函数上,KBEngine.Proxy已经封装了和客户端通讯的方法(通过Mailbox)。
至此,地图创建完成。
对于NPC/Monster,是先创建其出生点,再由出生点创建真正的NPC/Monster
Entity是服务器与客户端交互的一切实体的总称,包括:账号,角色,NCP,Monster,公会,等等。Entity通过 .def 来定义自己的属性和方法,指定属性和方法的作用域,即(Base, Cell, Client)的访问权限。因此C/S之间的消息协议实际上只是针对于Entity的远程调用。所以KBEngine本身没有消息协议一说,所有业务逻辑都围绕着Entity展开,通过.def来维护。
参见:
http://kbengine.org/cn/docs/programming/entitydef.html
http://kbengine.org/cn/docs/configuration/entities.html