mq.lua 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. -- 消息队列子系统
  2. local skynet = require "skynet"
  3. require "skynet.manager"
  4. local logger = require "logger"
  5. local mq = skynet.localname(".mq")
  6. local CMD = {}
  7. local MODULE = {}
  8. function MODULE.list_command_interests() return CMD end
  9. function MODULE.monitor(character)
  10. -- 在各模块 ready 接口执行之后
  11. character.monitor('ready', function()
  12. -- 注册到消息中心
  13. skynet.call(mq, "lua", "subscribe", character.uid)
  14. -- 有些模块需要确切的知道,离线消息处理完毕;
  15. local co = coroutine.running()
  16. skynet.fork(function()
  17. character.dispatch("mq.ready")
  18. skynet.wakeup(co)
  19. end)
  20. skynet.wait(co)
  21. end)
  22. -- 在各模块 saybye 接口执行之前
  23. character.monitor('disconnect', function()
  24. -- 从消息中心注销自己
  25. skynet.call(mq, "lua", "unsubscribe", character.uid)
  26. end)
  27. -- logger.trace("mq.monitor")
  28. end
  29. function CMD.publish(character, signame, ...)
  30. logger.trace("publish: %s", signame)
  31. character.dispatch(signame, ...)
  32. end
  33. return MODULE