123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- local dataMode = require "dataMode"
- local timeUtil = require("utils.timeUtil")
- local serverLogUtil = require("utils.serverLogUtil")
- local util_online = require("utils.util_online")
- local sessionData = require("data.session")
- local moduleData = require("data.module")
- 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()
- -- 在线人数
- util_online:add_online_count(self.uid)
- -- 初始化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()
- for _, cname in pairs(self.moduleList) do
- self[cname]:do_logout()
- self[cname]:backup_to_db()
- end
- -- 埋点
- local currTime = timeUtil.now(self.uid)
- local loginTime = moduleData:hget_int(self.uid, "player", "loginTime")
- loginTime = (not loginTime or loginTime == 0) and currTime or loginTime
- local mins = currTime - loginTime
- local bandShareCode = moduleData:hget(self.uid, "user", "bandShareCode")
- local channel = moduleData:get_channel(self.uid)
- local version = moduleData:get_version(self.uid)
- serverLogUtil.logLogout(self.uid, bandShareCode or "", channel, version, mins)
- -- 删除玩家session信息
- sessionData:user_update_cluster_info(self.uid, "gate")
- sessionData:user_update_cluster_info(self.uid, "game")
- -- 在线人数
- util_online:sub_online_count(self.uid)
- 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
|