srvProtoLoad.lua 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. --[[
  2. Descripttion:协议加载服务
  3. version:
  4. Author: Neo,Huang
  5. Date: 2022-07-04 11:24:54
  6. LastEditors: Neo,Huang
  7. LastEditTime: 2022-07-04 20:48:16
  8. --]]
  9. local skynet = require "skynet"
  10. require "skynet.manager"
  11. local sprotoloader = require "sprotoloader"
  12. local sprotoparser = require "sprotoparser"
  13. local mode = ...
  14. local c2sProto = ""
  15. local s2cProto = ""
  16. -- 读取协议
  17. local function l_read_socket_sproto()
  18. local struct = require("struct_server")
  19. local data = require("socket_server")
  20. c2sProto = struct .. data.c2s
  21. s2cProto = struct .. data.s2c
  22. end
  23. local function l_read_http_sproto()
  24. local struct = require("struct_server")
  25. local data = require("http_server")
  26. c2sProto = struct .. data.c2s
  27. s2cProto = struct .. data.s2c
  28. end
  29. local function l_read_sproto()
  30. local struct = require("struct_server")
  31. local httpData = require("http_server")
  32. local socketData = require("socket_server")
  33. c2sProto = struct .. httpData.c2s .. socketData.c2s
  34. s2cProto = struct .. httpData.s2c .. socketData.s2c
  35. end
  36. local function l_clear_sproto()
  37. package.loaded["struct_server"] = nil
  38. package.loaded["http_server"] = nil
  39. package.loaded["socket_server"] = nil
  40. end
  41. local function l_load_sproto()
  42. if mode == "http" then
  43. l_read_http_sproto()
  44. elseif mode == "socket" then
  45. l_read_socket_sproto()
  46. else
  47. l_read_sproto()
  48. end
  49. local proto = {}
  50. proto.c2s = sprotoparser.parse(c2sProto)
  51. proto.s2c = sprotoparser.parse(s2cProto)
  52. sprotoloader.save(proto.c2s, 1)
  53. sprotoloader.save(proto.s2c, 2)
  54. end
  55. local function l_update_sproto()
  56. l_clear_sproto()
  57. l_load_sproto()
  58. end
  59. local CMD = {update_proto = l_update_sproto}
  60. skynet.start(
  61. function()
  62. l_load_sproto()
  63. skynet.register(".srvProtoLoad")
  64. skynet.dispatch(
  65. "lua",
  66. function(session, _, command, ...)
  67. local f = CMD[command]
  68. if session == 0 then
  69. return f(...)
  70. end
  71. skynet.ret(skynet.pack(f(...)))
  72. end
  73. )
  74. -- don't call skynet.exit() , because sproto.core may unload and the global slot become invalid
  75. end
  76. )