role.lua 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. local dataMode = require "dataMode"
  2. local timeUtil = require("utils.timeUtil")
  3. local serverLogUtil = require("utils.serverLogUtil")
  4. local sessionData = require("data.session")
  5. local moduleData = require("data.module")
  6. local root = class("role")
  7. -- 角色构造
  8. function root:ctor(uid, gSession)
  9. local mapClass = dataMode.get_module_class_map()
  10. self.uid = uid
  11. self.gateNode = nil
  12. self.gateAgent = nil
  13. self.moduleList = {}
  14. -- self.createTime = timeUtil.currentTime()
  15. for _, moduleClass in pairs(mapClass) do
  16. local cname = moduleClass.__cname
  17. assert(self[cname] == nil)
  18. local moduleObj = moduleClass.new(uid)
  19. if moduleObj.isPersonal then
  20. self[cname] = moduleObj
  21. table.insert(self.moduleList, cname)
  22. end
  23. end
  24. end
  25. -- 登陆各个模块
  26. function root:login(session)
  27. -- 模块载入热数据
  28. self:load_modules()
  29. -- 初始化session 信息
  30. local nodeInfo = {nodeName = session.gateNode, agent = session.gateAgent}
  31. sessionData:user_update_cluster_info(self.uid, "gate", nodeInfo)
  32. nodeInfo.nodeName = session.gameNode
  33. nodeInfo.agent = session.gameAgent
  34. sessionData:user_update_cluster_info(self.uid, "game", nodeInfo)
  35. -- 记录网关节点信息
  36. self.gateNode = session.gateNode
  37. self.gateAgent = session.gateAgent
  38. for _, cname in pairs(self.moduleList) do
  39. self[cname]:do_login()
  40. end
  41. end
  42. -- 加载模块
  43. function root:load_modules()
  44. for _, cname in ipairs(self.moduleList) do
  45. self[cname]:get_data_from_db()
  46. end
  47. end
  48. -- 登出各个模块
  49. function root:logout_modules()
  50. for _, cname in pairs(self.moduleList) do
  51. self[cname]:do_logout()
  52. self[cname]:backup_to_db()
  53. end
  54. -- 埋点
  55. local currTime = timeUtil.now(self.uid)
  56. local loginTime = moduleData:hget_int(self.uid, "player", "loginTime")
  57. loginTime = (not loginTime or loginTime == 0) and currTime or loginTime
  58. local mins = currTime - loginTime
  59. local bandShareCode = moduleData:hget(self.uid, "user", "bandShareCode")
  60. local channel = moduleData:get_channel(self.uid)
  61. local version = moduleData:get_version(self.uid)
  62. serverLogUtil.logLogout(self.uid, bandShareCode or "", channel, version, mins)
  63. -- 删除玩家session信息
  64. sessionData:user_update_cluster_info(self.uid, "gate")
  65. sessionData:user_update_cluster_info(self.uid, "game")
  66. end
  67. -- 初始化游戏事件
  68. function root:init_game_event()
  69. self.eventIdMap = nil
  70. for _, cname in pairs(self.moduleList) do
  71. if self[cname].get_listen_event_list then
  72. local eventIdList = self[cname]:get_listen_event_list()
  73. for _, eventId in ipairs(eventIdList or {}) do
  74. self.eventIdMap = self.eventIdMap or {}
  75. self.eventIdMap[eventId] = self.eventIdMap[eventId] or {}
  76. table.insert(self.eventIdMap[eventId], cname)
  77. end
  78. end
  79. end
  80. end
  81. -- 分派玩家事件
  82. function root:dispath_game_event(id, params)
  83. if not self.eventIdMap then
  84. self:init_game_event()
  85. end
  86. if self.eventIdMap == nil or not self.eventIdMap[id] then
  87. return
  88. end
  89. for _, cname in pairs(self.eventIdMap[id]) do
  90. self[cname]:user_game_event(id, params)
  91. end
  92. end
  93. return root