clusterproxy.lua 885 B

123456789101112131415161718192021222324252627282930313233
  1. local skynet = require "skynet"
  2. local cluster = require "skynet.cluster"
  3. require "skynet.manager" -- inject skynet.forward_type
  4. local node, address = ...
  5. skynet.register_protocol {
  6. name = "system",
  7. id = skynet.PTYPE_SYSTEM,
  8. unpack = function (...) return ... end,
  9. }
  10. local forward_map = {
  11. [skynet.PTYPE_SNAX] = skynet.PTYPE_SYSTEM,
  12. [skynet.PTYPE_LUA] = skynet.PTYPE_SYSTEM,
  13. [skynet.PTYPE_RESPONSE] = skynet.PTYPE_RESPONSE, -- don't free response message
  14. }
  15. skynet.forward_type( forward_map ,function()
  16. local clusterd = skynet.uniqueservice("clusterd")
  17. local n = tonumber(address)
  18. if n then
  19. address = n
  20. end
  21. skynet.dispatch("system", function (session, source, msg, sz)
  22. if session == 0 then
  23. skynet.send(clusterd, "lua", "push", node, address, msg, sz)
  24. else
  25. skynet.ret(skynet.rawcall(clusterd, "lua", skynet.pack("req", node, address, msg, sz)))
  26. end
  27. end)
  28. end)