skynet demo plain text 分支(四)通讯协议的载入

11 篇文章 2 订阅

skynet demo 项目地址(plain text分支 )


-- protoloader.lua
local skynet = require "skynet"
local sprotoparser = require "sprotoparser"
local sprotoloader = require "sprotoloader"

local data = {}
local CMD = {}

local function load(name)
	local filename = string.format("proto/%s", name)
	local f = assert(io.open(filename), "Can't open " .. name)
	local t = f:read "a"
	f:close()
	return sprotoparser.parse(t)
end

function CMD.load(list)
	for i, name in ipairs(list) do
		local p = load(name)
		skynet.error(string.format("load proto [%s] in slot %d", name, i))
		data[name] = i
		sprotoloader.save(p, i)
	end
end

function CMD.index(name)
	return data[name]
end

skynet.start(function()
	skynet.dispatch("lua", function(session, source, cmd, ...)
		local f = assert(CMD[cmd])
		skynet.ret(skynet.pack(f(...)))
	end)
end)

通讯协议需要从文件中读取协议的定义信息,然后通过sprotoparser解析成二进制流才能交给sprotoloader加载到skynet框架使用。

编写protoloader.lua服务的目的在于方便使用,你也可以直接在main.lua读取.sproto文件并交由sprotoparser解析,然后通过sprotoloader加载到框架中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值