12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- --[[
- Descripttion:协议加载服务
- version:
- Author: Neo,Huang
- Date: 2022-07-04 11:24:54
- LastEditors: Neo,Huang
- LastEditTime: 2022-07-04 20:48:16
- --]]
- local skynet = require "skynet"
- require "skynet.manager"
- local sprotoloader = require "sprotoloader"
- local sprotoparser = require "sprotoparser"
- local mode = ...
- local c2sProto = ""
- local s2cProto = ""
- -- 读取协议
- local function l_read_socket_sproto()
- local struct = require("struct_server")
- local data = require("socket_server")
- c2sProto = struct .. data.c2s
- s2cProto = struct .. data.s2c
- end
- local function l_read_http_sproto()
- local struct = require("struct_server")
- local data = require("http_server")
- c2sProto = struct .. data.c2s
- s2cProto = struct .. data.s2c
- end
- local function l_read_sproto()
- local struct = require("struct_server")
- local httpData = require("http_server")
- local socketData = require("socket_server")
- c2sProto = struct .. httpData.c2s .. socketData.c2s
- s2cProto = struct .. httpData.s2c .. socketData.s2c
- end
- local function l_clear_sproto()
- package.loaded["struct_server"] = nil
- package.loaded["http_server"] = nil
- package.loaded["socket_server"] = nil
- end
- local function l_load_sproto()
- if mode == "http" then
- l_read_http_sproto()
- elseif mode == "socket" then
- l_read_socket_sproto()
- else
- l_read_sproto()
- end
- local proto = {}
- proto.c2s = sprotoparser.parse(c2sProto)
- proto.s2c = sprotoparser.parse(s2cProto)
- sprotoloader.save(proto.c2s, 1)
- sprotoloader.save(proto.s2c, 2)
- end
- local function l_update_sproto()
- l_clear_sproto()
- l_load_sproto()
- end
- local CMD = {update_proto = l_update_sproto}
- skynet.start(
- function()
- l_load_sproto()
- skynet.register(".srvProtoLoad")
- skynet.dispatch(
- "lua",
- function(session, _, command, ...)
- local f = CMD[command]
- if session == 0 then
- return f(...)
- end
- skynet.ret(skynet.pack(f(...)))
- end
- )
- -- don't call skynet.exit() , because sproto.core may unload and the global slot become invalid
- end
- )
|