--[[ 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 )