role.lua 2.6 KB

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