role.lua 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. end
  50. -- 删除玩家session信息
  51. sessionData:user_update_cluster_info(self.uid, "gate")
  52. sessionData:user_update_cluster_info(self.uid, "game")
  53. end
  54. -- 初始化游戏事件
  55. function root:init_game_event()
  56. self.eventIdMap = nil
  57. for _, cname in pairs(self.moduleList) do
  58. if self[cname].get_listen_event_list then
  59. local eventIdList = self[cname]:get_listen_event_list()
  60. for _, eventId in ipairs(eventIdList or {}) do
  61. self.eventIdMap = self.eventIdMap or {}
  62. self.eventIdMap[eventId] = self.eventIdMap[eventId] or {}
  63. table.insert(self.eventIdMap[eventId], cname)
  64. end
  65. end
  66. end
  67. end
  68. -- 分派玩家事件
  69. function root:dispath_game_event(id, params)
  70. if not self.eventIdMap then
  71. self:init_game_event()
  72. end
  73. if self.eventIdMap == nil or not self.eventIdMap[id] then
  74. return
  75. end
  76. for _, cname in pairs(self.eventIdMap[id]) do
  77. self[cname]:user_game_event(id, params)
  78. end
  79. end
  80. return root