| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- -- require("luaext")
- local proto_path = "./proto/"
- local client_protocal_name = "protocal.proto"
-
- --获取文件名
- local function strippath(filename)
- --return string.match(filename, ".+/([^/]*%.%w+)$") -- *nix system
- return string.match(filename, ".+\\([^\\]*%.%w+)$") -- *nix system
- end
-
- --去除扩展名
- local function stripextension(filename)
- local idx = filename:match(".+()%.%w+$")
- if(idx) then
- return filename:sub(1, idx-1)
- else
- return filename
- end
- end
-
- --获取扩展名
- local function getextension(filename)
- return filename:match(".+%.(%w+)$")
- end
- local function endswith(str, substr)
- if str == nil or substr == nil then
- return nil, "the string or the sub-string parameter is nil"
- end
- str_tmp = string.reverse(str)
- substr_tmp = string.reverse(substr)
- if string.find(str_tmp, substr_tmp) ~= 1 then
- return false
- else
- return true
- end
- end
- local function getfiles(path, suffix)
- -- body
- local t = {}
- for dir in io.popen(string.format([[dir "%s" /b]], path)):lines() do
- if endswith(dir, "." .. suffix) then
- table.insert(t, dir)
- end
- end
- return t
- end
- local function readFileString(path)
- local file = io.open(path, "r")
- if file == nil then
- return false
- end
- local content = {}
- for l in file:lines() do
- if string.find(l, '//') ~= nil then
- content[#content + 1] = l
- end
- end
-
- return content
- end
- local function writeFileContent(path, content)
- local file = io.open(path,"w")
- file:write(content)
- file:close()
- end
- local message_content
- local content = [[syntax = "proto3";
- package serverproto;
- ]]
- local import_content = "\n"
- local request_content = "message Request {%s}\n"
- local response_content = "message Response {%s}\n"
- local request_cs = "\n"
- local response_sc = "\n"
- local pbs = getfiles(proto_path, "proto")
- for _, v in pairs(pbs) do
- local k = string.sub(v, 1, -7)
- if k == "messagedefclient" then
- message_content = readFileString(proto_path..v)
- elseif k ~= "protocal" then
- import_content = import_content .. string.format([[import "%s.proto";]],k).."\n"
- end
- end
- import_content = import_content .."\n"
- for _,v in pairs(message_content) do
- local idx = string.find(v, '=')
- local idx1 = string.find(v, ';')
- local pb_name = string.sub(v, 1, idx - 1)
- local pb_id = string.sub(v, idx + 1, idx1 - 1)
- local idx2 = string.find(v, '%[')
- local idx3 = string.find(v, '%]')
- local pb_message = string.sub(v, idx2 + 1, idx3 - 1)
- local idx4 = string.find(v, "//")
- local pb_desc = string.sub(v, idx4, -1)
- if string.find(pb_name, "CS_") ~= nil then
- request_cs = request_cs .." ".. pb_message .. " "..pb_name.." ".." = "..pb_id..";".." "..pb_desc.."\n"
- elseif string.find(pb_name, "SC_") ~= nil then
- response_sc = response_sc .." ".. pb_message .. " "..pb_name.." ".." = "..pb_id..";".." "..pb_desc.."\n"
- end
- end
- request_content = string.format(request_content, request_cs)
- response_content = string.format(response_content, response_sc)
- content = content .. import_content .. request_content .. response_content
- writeFileContent(proto_path..client_protocal_name, content)
- local message = ""
- local confirm_message = ""
- for k, v in pairs(message_content) do
- v = string.gsub(v, ';', ',')
- v = string.gsub(v, '//', '--')
- message = message ..v.."\n"
- if string.find(v, 'confirm]') ~= nil then
- confirm_message = confirm_message ..v.."\n"
- end
- end
- local lua_content = [[
- local ProtoMsgId = {
- %s
- }
- return ProtoMsgId
- ]]
- lua_content = string.format(lua_content, message)
- writeFileContent(proto_path.."ProtoMsgId.lua", lua_content)
- local lua_confirm_content = [[
- local ProtoConfirmMsgId = {
- %s
- }
- return ProtoConfirmMsgId
- ]]
- lua_confirm_content = string.format(lua_confirm_content, confirm_message)
- writeFileContent(proto_path.."ProtoConfirmMsgId.lua", lua_confirm_content)
|