12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- local dataMode = require "dataMode"
- local sessionData = require("data.session")
- local root = class("role")
- -- 角色构造
- function root:ctor(uid, gSession)
- local mapClass = dataMode.get_module_class_map()
- self.uid = uid
- self.gateNode = nil
- self.gateAgent = nil
- self.moduleList = {}
- -- self.createTime = timeUtil.currentTime()
- for _, moduleClass in pairs(mapClass) do
- local cname = moduleClass.__cname
- assert(self[cname] == nil)
- local moduleObj = moduleClass.new(uid)
- if moduleObj.isPersonal then
- self[cname] = moduleObj
- table.insert(self.moduleList, cname)
- end
- end
- end
- -- 登陆各个模块
- function root:login(session)
- -- 模块载入热数据
- self:load_modules()
- -- 初始化session 信息
- local nodeInfo = {nodeName = session.gateNode, agent = session.gateAgent}
- sessionData:user_update_cluster_info(self.uid, "gate", nodeInfo)
- nodeInfo.nodeName = session.gameNode
- nodeInfo.agent = session.gameAgent
- sessionData:user_update_cluster_info(self.uid, "game", nodeInfo)
- -- 记录网关节点信息
- self.gateNode = session.gateNode
- self.gateAgent = session.gateAgent
- for _, cname in pairs(self.moduleList) do
- self[cname]:do_login()
- end
- end
- -- 加载模块
- function root:load_modules()
- for _, cname in ipairs(self.moduleList) do
- self[cname]:get_data_from_db()
- end
- end
- -- 登出各个模块
- function root:logout_modules()
- for _, cname in pairs(self.moduleList) do
- self[cname]:do_logout()
- end
- -- 删除玩家session信息
- sessionData:user_update_cluster_info(self.uid, "gate")
- sessionData:user_update_cluster_info(self.uid, "game")
- end
- -- 初始化游戏事件
- function root:init_game_event()
- self.eventIdMap = nil
- for _, cname in pairs(self.moduleList) do
- if self[cname].get_listen_event_list then
- local eventIdList = self[cname]:get_listen_event_list()
- for _, eventId in ipairs(eventIdList or {}) do
- self.eventIdMap = self.eventIdMap or {}
- self.eventIdMap[eventId] = self.eventIdMap[eventId] or {}
- table.insert(self.eventIdMap[eventId], cname)
- end
- end
- end
- end
- -- 分派玩家事件
- function root:dispath_game_event(id, params)
- if not self.eventIdMap then
- self:init_game_event()
- end
- if self.eventIdMap == nil or not self.eventIdMap[id] then
- return
- end
- for _, cname in pairs(self.eventIdMap[id]) do
- self[cname]:user_game_event(id, params)
- end
- end
- return root
|