update sproto to support empty request

This commit is contained in:
Cloud Wu
2014-09-07 18:44:04 +08:00
parent db9ab88a6c
commit 01269c88ff
5 changed files with 51 additions and 34 deletions

View File

@@ -126,11 +126,19 @@ function rpc:dispatch(...)
if header.type then
-- request
local proto = queryproto(self.__proto, header.type)
local result = core.decode(proto.request, content)
if header_tmp.session then
return "REQUEST", proto.name, result, gen_response(self, proto.response, header_tmp.session)
if proto.request then
local result = core.decode(proto.request, content)
if header_tmp.session then
return "REQUEST", proto.name, result, gen_response(self, proto.response, header_tmp.session)
else
return "REQUEST", proto.name, result
end
else
return "REQUEST", proto.name, result
if header_tmp.session then
return "REQUEST", proto.name, nil, gen_response(self, proto.response, header_tmp.session)
else
return "REQUEST", proto.name
end
end
else
-- response

View File

@@ -271,30 +271,35 @@ local function packtype(name, t, alltypes)
end
local function packproto(name, p, alltypes)
if p.request == nil then
error(string.format("Protocol %s need request", name))
-- if p.request == nil then
-- error(string.format("Protocol %s need request", name))
-- end
if p.request then
local request = alltypes[p.request]
if request == nil then
error(string.format("Protocol %s request type %s not found", name, p.request))
end
end
local request = alltypes[p.request]
if request == nil then
error(string.format("Protocol %s request type %s not found", name, p.request))
end
local tmp
if p.response then
tmp = {
"\4\0", -- 4 fields
"\0\0", -- name (id=0, ref=0)
packvalue(p.tag), -- tag (tag=1)
packvalue(alltypes[p.request]), -- request typename (tag=2)
packvalue(alltypes[p.response]), -- response typename (tag=3)
}
local tmp = {
"\4\0", -- 4 fields
"\0\0", -- name (id=0, ref=0)
packvalue(p.tag), -- tag (tag=1)
}
if p.request == nil and p.response == nil then
tmp[1] = "\2\0"
else
tmp = {
"\3\0", -- 3 fields
"\0\0", -- name (id=0, ref=0)
packvalue(p.tag), -- tag (tag=1)
packvalue(alltypes[p.request]), -- request typename (tag=2)
}
if p.request then
table.insert(tmp, packvalue(alltypes[p.request])) -- request typename (tag=2)
else
table.insert(tmp, "\1\0")
end
if p.response then
table.insert(tmp, packvalue(alltypes[p.response])) -- request typename (tag=3)
else
tmp[1] = "\3\0"
end
end
table.insert(tmp, packbytes(name))
return packbytes(table.concat(tmp))