From 7a112cc797ce60d6ed6b1368f5821ace6b6be6c7 Mon Sep 17 00:00:00 2001 From: xiyoo0812 Date: Sat, 7 Oct 2023 16:55:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96web=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .luacheckrc | 26 +- bin/database.conf | 2 +- extend/lmake/ltemplate.lua | 61 +++-- server/center/gm_page.lua | 473 ++++++++++++++++++--------------- server/center/page/gm.css | 58 ++++ server/center/page/gm.html | 61 +++++ server/center/page/gm.js | 212 +++++++++++++++ server/login/login_servlet.lua | 1 + tools/accord.bat | 12 - tools/accord/accord.lua | 145 ---------- tools/accord/accord_conf.json | 1 - tools/accord/cases/login.lua | 20 -- tools/accord/server.lua | 5 - tools/gmbuild.bat | 12 + tools/mongo/index.lua | 2 +- 15 files changed, 653 insertions(+), 438 deletions(-) create mode 100644 server/center/page/gm.css create mode 100644 server/center/page/gm.html create mode 100644 server/center/page/gm.js delete mode 100644 tools/accord.bat delete mode 100644 tools/accord/accord.lua delete mode 100644 tools/accord/accord_conf.json delete mode 100644 tools/accord/cases/login.lua delete mode 100644 tools/accord/server.lua create mode 100644 tools/gmbuild.bat diff --git a/.luacheckrc b/.luacheckrc index 6ffdf425..56186448 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -14,24 +14,20 @@ max_cyclomatic_complexity = 13 max_code_line_length = 160 max_comment_line_length = 160 exclude_files = { - "script/luabt/*.*", - "script/luaoop/*.*", - "script/luabt/luaoop/*.*", - "script/luabt/LICENSE", - "script/luaoop/LICENSE", - "script/luabt/luaoop/LICENSE", - "server/robot/accord/page/*", - "extend/lmake/share.lua" + "extend/lmake/share.lua", + "server/robot/accord/page/*" } include_files = { - "script/*", - "server/*", - "worker/*", - "bin/proto/*.lua", - "tools/encrypt/*", - "tools/excel2lua/*", + "script/*.lua", + "server/*.lua", + "script/*/*.lua", + "server/*/*.lua", + "script/*/*/*.lua", + "server/*/*/*.lua", + "script/*/*/*/*.lua", + "server/*/*/*/*.lua", "extend/lmake/*.lua", - "extend/lmake/ltemplate/*.lua", + "tools/*/*.lua", } ignore = {"212", "213", "512"} diff --git a/bin/database.conf b/bin/database.conf index 2c7dd418..3ca8bf7f 100644 --- a/bin/database.conf +++ b/bin/database.conf @@ -19,7 +19,7 @@ set_env("QUANTA_MONGO_URLS", [[ ]]) --redis set_env("QUANTA_REDIS_URLS", [[ - redis://root:123456@127.0.0.1:6379; + redis://root:123456@10.96.8.100:6379; ]]) --mysql set_env("QUANTA_MYSQL_URLS", [[ diff --git a/extend/lmake/ltemplate.lua b/extend/lmake/ltemplate.lua index d4082680..4a9b82ab 100644 --- a/extend/lmake/ltemplate.lua +++ b/extend/lmake/ltemplate.lua @@ -164,12 +164,11 @@ local function render(content, env) return nil, chunk end ---导出文件模板 +--根据配置导出文件模板 --tpl_f: 文件模板 --tpl_out_f: 输出文件 --tpl_env: 环境变量 ---tpl_var_f: 环境变量文件 -local function render_file(tpl_f, tpl_out_f, tpl_env, tpl_var_f) +local function render_file(tpl_f, tpl_out_f, tpl_env) if not tpl_f or not tpl_out_f or not tpl_env then error("render template file params error!") return @@ -182,19 +181,6 @@ local function render_file(tpl_f, tpl_out_f, tpl_env, tpl_var_f) tpl_env.NAME = tpl_f local content = template_file:read("*all") template_file:close() - if tpl_var_f then - setmetatable(tpl_env, { __index = function(t, k) return _G[k] end }) - local func, err = loadfile(tpl_var_f, "bt", tpl_env) - if not func then - error(sformat("open template variable file %s failed :%s", tpl_var_f, err)) - return - end - local ok, res = pcall(func) - if not ok then - error(sformat("load template variable file %s failed :%s", tpl_var_f, res)) - return - end - end local out_file = iopen(tpl_out_f, "w") if not out_file then error(sformat("open template out file %s failed!", tpl_out_f)) @@ -214,13 +200,52 @@ local function render_file(tpl_f, tpl_out_f, tpl_env, tpl_var_f) print(sformat("render template file %s to %s success!", tpl_f, tpl_out_f)) end +--输入参数 +local arg_num = select("#", ...) + --工具用法 --tpl_f: 模板文件路径 --tpl_out_f:输出文件路径 --tpl_var_f:环境变量配置文件 -if select("#", ...) == 3 then +if arg_num == 3 then + local tpl_env = {} local tpl_f, tpl_out_f, tpl_var_f = select(1, ...) - render_file(tpl_f, tpl_out_f, {}, tpl_var_f) + if tpl_var_f then + setmetatable(tpl_env, { __index = function(t, k) return _G[k] end }) + local func, err = loadfile(tpl_var_f, "bt", tpl_env) + if not func then + error(sformat("open template variable file %s failed :%s", tpl_var_f, err)) + return + end + local ok, res = pcall(func) + if not ok then + error(sformat("load template variable file %s failed :%s", tpl_var_f, res)) + return + end + end + render_file(tpl_f, tpl_out_f, tpl_env) +end + +--工具用法 +--tpl_f: 模板文件路径 +--tpl_out_f:输出文件路径 +--key:文件索引, filename:文件名, ... +if arg_num > 3 then + local tpl_env = {} + local args = { ... } + local filenum = (arg_num - 2) // 2 + for i = 1, filenum do + local key = args[2 + i * 2 - 1] + local filename = args[2 + i * 2] + local args_file = iopen(filename, "r") + if not args_file then + error(sformat("open args file %s failed!", filename)) + return + end + tpl_env[key] = args_file:read("*all") + args_file:close() + end + render_file(args[1], args[2], tpl_env) end return { diff --git a/server/center/gm_page.lua b/server/center/gm_page.lua index 9ad5e84e..4878b737 100644 --- a/server/center/gm_page.lua +++ b/server/center/gm_page.lua @@ -12,64 +12,64 @@ return [[
@@ -81,11 +81,6 @@ return [[ - - - - -
@@ -118,179 +113,217 @@ return [[ ]] diff --git a/server/center/page/gm.css b/server/center/page/gm.css new file mode 100644 index 00000000..317d206b --- /dev/null +++ b/server/center/page/gm.css @@ -0,0 +1,58 @@ +html,body,div,h1,h2,h3,h4,h5,h6,p,span{ + padding: 0; + margin: 0; +} +body{ + padding-top: 10px; + overflow: auto; +} +.gmDumpContainer { + float: left; + border: 1px solid black; + height: 800px; + width: 30%; + margin-top:30px; + overflow: auto; +} +.gmContainer { + padding: 2px; + border: 1px solid black; + margin-top:30px; + height: 800px; + width: 70%; + overflow: auto; +} +.historyMsg{ + top: 5px; + border: 1px solid black; + height: 660px; + padding: 3px; + overflow: auto; +} +.newMsg{ + text-align: left; + margin-top: 5px; +} +.myMsg{ + background-color: grey; + color: white; + text-align: left; + margin-top: 5px; +} +.control{ + border: 1px solid black; + height: 130px; +} +.control-row{ + margin-top: 10px; +} +.inputMsg{ + height: 110px !important; + resize: none; +} +.sendBtn{ + height: 100px; +} +footer{ + text-align: center; +} \ No newline at end of file diff --git a/server/center/page/gm.html b/server/center/page/gm.html new file mode 100644 index 00000000..4e32e7a5 --- /dev/null +++ b/server/center/page/gm.html @@ -0,0 +1,61 @@ +-- luacheck: ignore +return [[ + + + + + + + + + GM Console + + + + +
+ +
+ +
+ 服务器: + + + + +
+
+
    +
  • 请选择服务器
  • +
+
+
+ +
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+ Designed and built by quanta +
+ + + + + +]] diff --git a/server/center/page/gm.js b/server/center/page/gm.js new file mode 100644 index 00000000..34545763 --- /dev/null +++ b/server/center/page/gm.js @@ -0,0 +1,212 @@ + +function changeServer(){ + var tx = document.getElementById("curServer").value; + window.open(tx, "_self"); +} + +function onfocusServer(){ + document.getElementById("curServer").value = ""; +} + +window.onload = function(){ + var host = window.location.host ; + var selectDiv = document.getElementById("curServer"); + selectDiv.value = host + var gmconsole = new GMConsole(); + gmconsole.init(); +}; + +var GMConsole = function(){ +}; + +GMConsole.prototype = { + init: function(){ + var that = this; + var cmd_index = 0; + var historyCmds = []; + var treeNodes = [{}]; + //获取服务器列表 + var fusion_url = "http://183.66.202.114:18080/server_mgr/query"; + + // 加载命令列表 + $.ajax({ + url: "/gmlist", + type: "GET", + dataType: "json", + contentType: "utf-8", + success: function (res) { + treeNodes[0] = res; + that._showConsole(treeNodes); + }, + error: function(status) { + document.write(JSON.stringify(status)); + } + }); + + // 加载命令列表 + $.ajax({ + url: fusion_url, + type: "GET", + dataType: "json", + contentType: "utf-8", + success: function (res) { + console.log(JSON.stringify(res)); + that._showServers(res); + }, + error: function(status) { + document.write(JSON.stringify(status)); + } + }); + + //sendMsg事件 + document.getElementById('send').addEventListener('click', function(){ + that._sendCommand(historyCmds); + cmd_index = historyCmds.length + }, false); + + //inputMsg事件 + document.getElementById('inputMsg').addEventListener('keyup', function(e){ + if (e.keyCode == 13 && e.ctrlKey){ + that._sendCommand(historyCmds); + cmd_index = historyCmds.length + } else if (e.keyCode == 38){ + if (cmd_index > 0) cmd_index = cmd_index - 1 + that._showCommand(historyCmds[cmd_index]) + } else if (e.keyCode == 40){ + if (cmd_index < historyCmds.length - 1) cmd_index = cmd_index + 1 + that._showCommand(historyCmds[cmd_index]) + } + }, false); + }, + + _showCommand: function(cmd) { + var inputMsg = document.getElementById('inputMsg'); + inputMsg.value = cmd; + inputMsg.focus(); + }, + + _showConsole: function(treeNodes) { + var that = this; + $('#consoleTree').treeview({data: treeNodes}); + //consoleTree事件 + $('#consoleTree').on('nodeSelected', function(event, data) { + if (data.tag == "gm") { + //参数数组 + var arg_arr = ["
命令: ", data.text,"  参数: ", data.command];
+                if (data.example) {
+                    arg_arr.push("
示例:"); + arg_arr.push(data.example); + } + if (data.tip) { + arg_arr.push("
说明:"); + arg_arr.push(data.tip); + } + arg_arr.push("
"); + var msg = arg_arr.join("") + that._displayNewMsg("historyMsg", msg, "myMsg"); + that._showCommand(data.name + " ") + } else if (data.tag == "log") { + window.open("http://" + data.text); + } + }); + }, + + _isJson(data){ + try{ + JSON.parse(data); + } + catch(err){ + return false; + } + return true; + }, + + _showServers: function(res){ + var curServerList = document.getElementById('curServerList'); + curServerList.value = ""; + + var host = window.location.host ; + var selectDiv = document.getElementById("curServer"); + selectDiv.value = host + + for (i = 0; i < res.data.length; i++) { + var option = new Option(); + option.innerHTML = res.data[i].name; + option.value = res.data[i].web; + + curServerList.appendChild(option); + console.log(option.value) + } + }, + + _inputMsgTrim(historyCmds){ + var that = this; + var inputMsg = document.getElementById('inputMsg'); + var msg = inputMsg.value.replace('\n', ''); + if (msg == ''){ + inputMsg.focus(); + return null; + } + historyCmds.push(msg); + var result = { cmdType : "cmd", data : {} }; + that._displayNewMsg("historyMsg", msg, "myMsg"); + if(that._isJson(msg)){ + result.cmdType = "json"; + result.data = JSON.stringify({ data : JSON.parse(msg) }); + return result; + } + result.data = JSON.stringify({ data : msg }) + return result; + }, + + _sendCommand: function(historyCmds) { + var that = this; + var result = that._inputMsgTrim(historyCmds); + if(!result){ + that._displayNewMsg("historyMsg", "error", "newMsg"); + return; + } + var url = result.cmdType == "cmd" ? "/command" : "/message"; + $.ajax({ + url: url, + type: "POST", + dataType: "json", + contentType: "application/json", + data: result.data, + success: function (res) { + var result = res.msg + if (res.code != 0) { + var data = "
" + result + "
"; + that._displayNewMsg("historyMsg", data, "newMsg"); + return + } + if (typeof(result) == "object") { + var data = JSON.stringify(result, null, " "); + data = "
" + data + "
"; + that._displayNewMsg("historyMsg", data, "newMsg"); + } else { + var data = "
" + result + "
"; + that._displayNewMsg("historyMsg", data, "newMsg"); + } + }, + error: function(status) { + var data = status.responseText; + data = data.replace(new RegExp("\n",'g'),"
"); + that._displayNewMsg("historyMsg", data, "newMsg"); + } + }); + inputMsg.value = ""; + inputMsg.focus(); + }, + + _displayNewMsg: function(container_id, msg, type){ + var container = document.getElementById(container_id); + var p = document.createElement('p'); + var text = document.createElement("span"); + text.innerHTML = msg; + p.setAttribute('class', type); + p.appendChild(text); + container.appendChild(p); + container.scrollTop = container.scrollHeight; + }, +}; \ No newline at end of file diff --git a/server/login/login_servlet.lua b/server/login/login_servlet.lua index 2ca0c416..20dd236e 100644 --- a/server/login/login_servlet.lua +++ b/server/login/login_servlet.lua @@ -64,6 +64,7 @@ function LoginServlet:on_account_login_req(session, cmd_id, body, session_id) local account_params = {} if platform >= PLATFORM_PASSWORD then --登录验证 + body.ip = session.ip local result = event_mgr:notify_listener("on_platform_login", platform, open_id, access_token, body, account_params) local ok, code, sdk_open_id, sdk_device_id = tunpack(result) local login_failed, login_code = qfailed(code, ok) diff --git a/tools/accord.bat b/tools/accord.bat deleted file mode 100644 index b18e8b63..00000000 --- a/tools/accord.bat +++ /dev/null @@ -1,12 +0,0 @@ -@echo off - -chcp 65001 - -:: 解析xlsm文件为lua - -set LUA_PATH=!/../tools/accord/?.lua;!/../script/?.lua;; - -..\bin\quanta.exe --entry=accord --proto=../bin/proto/ --input=./accord/ --output=../server/robot/accord/ - -pause - diff --git a/tools/accord/accord.lua b/tools/accord/accord.lua deleted file mode 100644 index f864eca4..00000000 --- a/tools/accord/accord.lua +++ /dev/null @@ -1,145 +0,0 @@ ---accord.lua - -local ldir = stdfs.dir -local lstem = stdfs.stem -local lmkdir = stdfs.mkdir -local lappend = stdfs.append -local lfilename = stdfs.filename -local lextension = stdfs.extension -local lcurdir = stdfs.current_path -local serialize = luakit.serialize -local pb_enum_id = protobuf.enum -local json_encode = json.encode -local tunpack = table.unpack -local sformat = string.format -local supper = string.upper -local ogetenv = os.getenv - -local pb_indexs = {} - -local function ssplit(str, token) - local t = {} - while #str > 0 do - local pos = str:find(token) - if not pos then - t[#t + 1] = str - break - end - if pos > 1 then - t[#t + 1] = str:sub(1, pos - 1) - end - str = str:sub(pos + 1, #str) - end - return t -end - -local function sends_with(str, ending) - return str:sub(-#ending) == ending -end - -local function parse_message(full_name, proto_name) - local proto_isreq = sends_with(proto_name, "_req") - if proto_isreq then - local package_name = tunpack(ssplit(full_name, ".")) - local enum_type = package_name .. ".NCmdId" - local msg_name = "NID_" .. supper(proto_name) - local msg_id = pb_enum_id(enum_type, msg_name) - if msg_id then - local fields = {} - for name, _, typ in protobuf.fields(full_name) do - fields[name] = (typ == "string") and "xxx" or 0 - end - pb_indexs[msg_name] = { - msg_id = msg_id, - name = msg_name, - fields = fields, - } - end - end - return pb_indexs -end - ---加载pb文件 -local function load_pbfiles(proto_dir, proto_file) - local full_name = lappend(proto_dir, proto_file) - --加载PB文件 - protobuf.loadfile(full_name) - --注册CMDID和PB的映射 - for name, basename, typ in protobuf.types() do - if typ == "message" then - parse_message(name, basename) - end - end -end - ---加载pb文件 -local function load_protocol(proto_path) - local dir_files = ldir(proto_path) - for _, file in pairs(dir_files) do - if lextension(file.name) == ".pb" then - load_pbfiles(proto_path, lfilename(file.name)) - end - end -end - ---加载case文件 -local function load_cases(tool_dir, case_dir) - local tcases = {} - local case_path = lappend(tool_dir, case_dir) - local dir_files = ldir(case_path) - for _, file in pairs(dir_files or {}) do - if lextension(file.name) == ".lua" then - local name = lstem(file.name) - tcases[name] = require(sformat("%s.%s", case_dir, name)) - end - end - return tcases -end - -local function export_json(input, output) - local configs = {} - configs.accord = pb_indexs - configs.servers = require("server") - configs.cases = load_cases(input, "cases") - --export - local jdata = json_encode(configs) - local ldata = serialize(configs) - local jsonname = lappend(input, "accord_conf.json") - local json_file = io.open(jsonname, "w") - json_file:write(jdata) - json_file:close() - local confname = lappend(output, "accord_conf.lua") - local conf_file = io.open(confname, "w") - conf_file:write("--luacheck: ignore 631\n") - conf_file:write(sformat("return {\n lua = %s,\n json = [[%s]]\n}\n", ldata, jdata)) - conf_file:close() - print("export accord config success!") -end - -local proto = lcurdir() -local input = lcurdir() -local output = lcurdir() -local env_proto = ogetenv("QUANTA_PROTO") -if not env_proto or #env_proto == 0 then - print("proto dir not config!") -else - proto = lappend(proto, env_proto) -end -local env_input = ogetenv("QUANTA_INPUT") -if not env_input or #env_input == 0 then - print("input dir not config!") -else - input = lappend(input, env_input) -end -local env_output = ogetenv("QUANTA_OUTPUT") -if not env_output or #env_output == 0 then - print("output dir not config!") -else - output = lappend(output, env_output) - lmkdir(output) -end - -load_protocol(proto) -export_json(input, output) - -os.exit() diff --git a/tools/accord/accord_conf.json b/tools/accord/accord_conf.json deleted file mode 100644 index 175f322b..00000000 --- a/tools/accord/accord_conf.json +++ /dev/null @@ -1 +0,0 @@ -{"servers":["127.0.0.1:20013"],"cases":{"login":{"protocols":[{"id":10009,"name":"NID_LOGIN_ROLE_CHOOSE_REQ","args":{"role_id":0,"user_id":0}},{"id":10011,"name":"NID_LOGIN_ROLE_DELETE_REQ","args":{"role_id":0,"user_id":0}}],"name":"login","openid":"test001","password":"123456","server":"127.0.0.1:20013"}},"accord":{"NID_LOGIN_ROLE_LOGOUT_REQ":{"msg_id":10015,"name":"NID_LOGIN_ROLE_LOGOUT_REQ","fields":{"role_id":0}},"NID_LOGIN_ROLE_RELOAD_REQ":{"msg_id":10017,"name":"NID_LOGIN_ROLE_RELOAD_REQ","fields":{"role_id":0,"token":0,"lobby":0,"user_id":0}},"NID_HEARTBEAT_REQ":{"msg_id":1001,"name":"NID_HEARTBEAT_REQ","fields":{"time":0,"serial":0}},"NID_LOGIN_RANDOM_NAME_REQ":{"msg_id":10005,"name":"NID_LOGIN_RANDOM_NAME_REQ","fields":{}},"NID_LOGIN_ACCOUNT_RELOAD_REQ":{"msg_id":10003,"name":"NID_LOGIN_ACCOUNT_RELOAD_REQ","fields":{"openid":"xxx","account_token":0}},"NID_LOGIN_ROLE_CHOOSE_REQ":{"msg_id":10009,"name":"NID_LOGIN_ROLE_CHOOSE_REQ","fields":{"role_id":0,"user_id":0}},"NID_LOGIN_ROLE_CREATE_REQ":{"msg_id":10007,"name":"NID_LOGIN_ROLE_CREATE_REQ","fields":{"model":0,"gender":0,"name":"xxx","user_id":0}},"NID_LOGIN_ACCOUNT_LOGIN_REQ":{"msg_id":10001,"name":"NID_LOGIN_ACCOUNT_LOGIN_REQ","fields":{"platform":0,"openid":"xxx","session":"xxx"}},"NID_LOGIN_ROLE_LOGIN_REQ":{"msg_id":10013,"name":"NID_LOGIN_ROLE_LOGIN_REQ","fields":{"role_id":0,"token":0,"lobby":0,"user_id":0}},"NID_LOGIN_ROLE_DELETE_REQ":{"msg_id":10011,"name":"NID_LOGIN_ROLE_DELETE_REQ","fields":{"role_id":0,"user_id":0}}}} \ No newline at end of file diff --git a/tools/accord/cases/login.lua b/tools/accord/cases/login.lua deleted file mode 100644 index d716dc9e..00000000 --- a/tools/accord/cases/login.lua +++ /dev/null @@ -1,20 +0,0 @@ ---login.lua - -return { - name = "login", - openid = "test001", - password = "123456", - server = "127.0.0.1:20013", - protocols = { - { - id = 10009, - name = "NID_LOGIN_ROLE_CHOOSE_REQ", - args = { user_id = 0, role_id = 0 } - }, - { - id = 10011, - name = "NID_LOGIN_ROLE_DELETE_REQ", - args = { user_id = 0, role_id = 0 } - } - } -} \ No newline at end of file diff --git a/tools/accord/server.lua b/tools/accord/server.lua deleted file mode 100644 index 09c77a23..00000000 --- a/tools/accord/server.lua +++ /dev/null @@ -1,5 +0,0 @@ ---server.lua - -return { - "127.0.0.1:20013" -} diff --git a/tools/gmbuild.bat b/tools/gmbuild.bat new file mode 100644 index 00000000..a1169661 --- /dev/null +++ b/tools/gmbuild.bat @@ -0,0 +1,12 @@ +@echo off + +set JS=../server/center/page/gm.js +set CSS=../server/center/page/gm.css +set TPL=../server/center/page/gm.html +set OUT=../server/center/gm_page.lua +set SCRIPT=../extend/lmake/ltemplate.lua + +..\bin\lua.exe %SCRIPT% %TPL% %OUT% GM_CSS %CSS% GM_SCRIPT %JS% + +pause + diff --git a/tools/mongo/index.lua b/tools/mongo/index.lua index ef416f90..19d57e24 100644 --- a/tools/mongo/index.lua +++ b/tools/mongo/index.lua @@ -51,7 +51,7 @@ local function generate_js(input_path, ouput_path) --创建索引,默认升序 idx_file:write(sformat("db.getCollection(\"%s\").createIndex({%s: 1}, {name: \"%s\",unique: true});\n", sheet, key, key)) if key2 then - idx_file:write(sformat("db.getCollection(\"%s\").createIndex({%s: 1}, {name: \"%s\",unique: true});\n", sheet, key2, key2)) + idx_file:write(sformat("db.getCollection(\"%s\").createIndex({%s: 1}, {name: \"%s\",unique: true});\n", sheet, key2, key2)) end idx_file:write("//------------------------------------------------------------------------\n\n") end