role.lua 3.4 KB

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