Commit a5486ede2d28fbf4981c678624674dc690d6d45d
1 parent
65421af2
csvdata 修改为 sharetable
Showing
18 changed files
with
233 additions
and
347 deletions
Show diff stats
src/actions/GmAction.lua
| @@ -16,7 +16,7 @@ function _M.clientRequest(agent, data) | @@ -16,7 +16,7 @@ function _M.clientRequest(agent, data) | ||
| 16 | end | 16 | end |
| 17 | 17 | ||
| 18 | function _M.testhotfix(role, pms) | 18 | function _M.testhotfix(role, pms) |
| 19 | - return csvdb["itemCsv"][1]["name"] .. " -=- " .. csvdb["itemCsv"][2]["name"] .. " -=- " .. role:getItemCount(123) .. " -=- " .. table.pack(next(role.heros))[2]:getBattleValue() | 19 | + return csvdb["itemCsv"][1]["name"] .. " -=- " .. globalCsv["codeVersion"] .. " -=- " .. role:getItemCount(123) .. " -=- " .. table.pack(next(role.heros))[2]:getBattleValue() |
| 20 | end | 20 | end |
| 21 | 21 | ||
| 22 | function _M.ignoreout(role, pms) | 22 | function _M.ignoreout(role, pms) |
src/actions/HeroAction.lua
| @@ -233,7 +233,7 @@ function _M.commentHeroRpc(agent, data) | @@ -233,7 +233,7 @@ function _M.commentHeroRpc(agent, data) | ||
| 233 | result.status = 1 | 233 | result.status = 1 |
| 234 | else | 234 | else |
| 235 | local commentKey = getCommentKey(heroType) | 235 | local commentKey = getCommentKey(heroType) |
| 236 | - local SERV = string.format(".NAMED%d", math.random(1, 5)) | 236 | + local SERV = string.format(".chatd%d", math.random(1, 5)) |
| 237 | local legal, mod = skynet.call(SERV, "lua", "check", content) | 237 | local legal, mod = skynet.call(SERV, "lua", "check", content) |
| 238 | if not legal then | 238 | if not legal then |
| 239 | content = mod or "" | 239 | content = mod or "" |
src/actions/HttpAction.lua
| 1 | -local codecache = require "skynet.codecache" -- 清空缓存用 | ||
| 2 | - | ||
| 3 | 1 | ||
| 4 | local _M = {} | 2 | local _M = {} |
| 5 | 3 | ||
| @@ -19,45 +17,12 @@ local _M = {} | @@ -19,45 +17,12 @@ local _M = {} | ||
| 19 | ]=] | 17 | ]=] |
| 20 | 18 | ||
| 21 | 19 | ||
| 22 | --- 清空缓存 | ||
| 23 | -function _M.clearcache(query, body) | ||
| 24 | - skynet.error(string.format("clearcache time: %s", skynet.timex())) | ||
| 25 | - codecache.clear() | ||
| 26 | - return 'success' | ||
| 27 | -end | ||
| 28 | - | ||
| 29 | ---重新加载 需要修改的csvdb -- 单字段修改 优先使用hotfix_csvdata | ||
| 30 | ---[=[ eg: | ||
| 31 | - body = """ | ||
| 32 | - csvdb["itemCsv"][1]["name"] = "测试一下" | ||
| 33 | - """ | ||
| 34 | -]=] | ||
| 35 | - | ||
| 36 | -function _M.reload_csvdata(query, body) | ||
| 37 | - if not body or body == "" then | ||
| 38 | - return 'no body' | ||
| 39 | - end | ||
| 40 | - | ||
| 41 | - local ok = pcall(load, body) | ||
| 42 | - if not ok then | ||
| 43 | - return "code error" | ||
| 44 | - end | ||
| 45 | - | ||
| 46 | - local ok, status = pcall(skynet.call, '.CSVDATA', "lua", "reload", body) | ||
| 47 | - if status == "ok" then | ||
| 48 | - skynet.error(string.format("reload_csvdata time: %s, code: %s", skynet.timex(), body)) | ||
| 49 | - return 'success' | ||
| 50 | - else | ||
| 51 | - return 'error update' | ||
| 52 | - end | ||
| 53 | -end | ||
| 54 | - | ||
| 55 | ---指定更新某个字段值 | ||
| 56 | --[=[ | 20 | --[=[ |
| 57 | 解码后 | 21 | 解码后 |
| 58 | body = { | 22 | body = { |
| 59 | - {"itemCsv", 1, "name", "测试一下"}, | ||
| 60 | - {"itemCsv", 2, "name", "测试一下"} | 23 | + "src/csvdata/init.lua", |
| 24 | + "unitCsv", | ||
| 25 | + "story_cgCsv", | ||
| 61 | } | 26 | } |
| 62 | ]=] | 27 | ]=] |
| 63 | function _M.hotfix_csvdata(query, body) | 28 | function _M.hotfix_csvdata(query, body) |
| @@ -69,14 +34,10 @@ function _M.hotfix_csvdata(query, body) | @@ -69,14 +34,10 @@ function _M.hotfix_csvdata(query, body) | ||
| 69 | if not ok or type(result) ~= 'table' then | 34 | if not ok or type(result) ~= 'table' then |
| 70 | return "decode error" | 35 | return "decode error" |
| 71 | end | 36 | end |
| 72 | - local ok, status = pcall(skynet.call, '.CSVDATA', "lua", "hotfix", result) | ||
| 73 | 37 | ||
| 74 | - if status == "ok" then | ||
| 75 | - skynet.error(string.format("hotfix_csvdata time: %s, code: %s", skynet.timex(), body)) | ||
| 76 | - return 'success' | ||
| 77 | - else | ||
| 78 | - return 'error update' | ||
| 79 | - end | 38 | + csvdb.hotfix(table.unpack(result)) |
| 39 | + | ||
| 40 | + return 'success' | ||
| 80 | end | 41 | end |
| 81 | 42 | ||
| 82 | -- 热更新代码 -- 针对 agent 执行发送过来的代码 -- 代码要规范~ | 43 | -- 热更新代码 -- 针对 agent 执行发送过来的代码 -- 代码要规范~ |
| @@ -150,7 +111,7 @@ function _M.hotfix_code(query, body) | @@ -150,7 +111,7 @@ function _M.hotfix_code(query, body) | ||
| 150 | 111 | ||
| 151 | skynet.error(string.format("hotfix_code time: %s, code: %s", skynet.timex(), body)) | 112 | skynet.error(string.format("hotfix_code time: %s, code: %s", skynet.timex(), body)) |
| 152 | 113 | ||
| 153 | - pcall(skynet.call, '.WATCHDOG', "lua", "hotfix", body) | 114 | + pcall(skynet.call, '.watchdog', "lua", "hotfix", body) |
| 154 | return 'success' | 115 | return 'success' |
| 155 | end | 116 | end |
| 156 | 117 |
src/actions/RoleAction.lua
| @@ -22,7 +22,7 @@ local function validName(name) | @@ -22,7 +22,7 @@ local function validName(name) | ||
| 22 | local exist = redisproxy:exists(string_format("user:%s", name)) | 22 | local exist = redisproxy:exists(string_format("user:%s", name)) |
| 23 | if exist then return "existed" end | 23 | if exist then return "existed" end |
| 24 | 24 | ||
| 25 | - local SERV = string_format(".NAMED%d", math.random(1, 5)) | 25 | + local SERV = string_format(".named%d", math.random(1, 5)) |
| 26 | local legal = skynet.call(SERV, "lua", "check", name) | 26 | local legal = skynet.call(SERV, "lua", "check", name) |
| 27 | return legal and "ok" or "illegal" | 27 | return legal and "ok" or "illegal" |
| 28 | end | 28 | end |
| @@ -217,7 +217,7 @@ function _M.loginRpc( agent, data ) | @@ -217,7 +217,7 @@ function _M.loginRpc( agent, data ) | ||
| 217 | 217 | ||
| 218 | -- 发下缓存的世界消息 | 218 | -- 发下缓存的世界消息 |
| 219 | local worldChatResponse = {worldChats = {}} | 219 | local worldChatResponse = {worldChats = {}} |
| 220 | - local ok, msgs = pcall(skynet.call, '.GLOBALD', "lua", "getWorldMsg", role._channelIdx) | 220 | + local ok, msgs = pcall(skynet.call, '.globald', "lua", "getWorldMsg", role._channelIdx) |
| 221 | if not ok then | 221 | if not ok then |
| 222 | msgs = {} | 222 | msgs = {} |
| 223 | end | 223 | end |
| @@ -365,7 +365,7 @@ function _M.changeIntroRpc(agent, data) | @@ -365,7 +365,7 @@ function _M.changeIntroRpc(agent, data) | ||
| 365 | local content = msg.content | 365 | local content = msg.content |
| 366 | if not content or type(content) ~= "string" then return end | 366 | if not content or type(content) ~= "string" then return end |
| 367 | 367 | ||
| 368 | - local SERV = string_format(".CHATED%d", math.random(1, 5)) | 368 | + local SERV = string_format(".chated%d", math.random(1, 5)) |
| 369 | local legal, mod = skynet.call(SERV, "lua", "check", content) | 369 | local legal, mod = skynet.call(SERV, "lua", "check", content) |
| 370 | if not legal then | 370 | if not legal then |
| 371 | content = mod or "" | 371 | content = mod or "" |
| @@ -750,7 +750,7 @@ function _M.chatRpc(agent, data) | @@ -750,7 +750,7 @@ function _M.chatRpc(agent, data) | ||
| 750 | -- 判断禁言 | 750 | -- 判断禁言 |
| 751 | local result = nil | 751 | local result = nil |
| 752 | 752 | ||
| 753 | - local SERV = string_format(".CHATED%d", math.random(1, 5)) | 753 | + local SERV = string_format(".chated%d", math.random(1, 5)) |
| 754 | local legal, mod = skynet.call(SERV, "lua", "check", content) | 754 | local legal, mod = skynet.call(SERV, "lua", "check", content) |
| 755 | if not legal then | 755 | if not legal then |
| 756 | content = mod or "" | 756 | content = mod or "" |
| @@ -805,7 +805,7 @@ function _M.chatRpc(agent, data) | @@ -805,7 +805,7 @@ function _M.chatRpc(agent, data) | ||
| 805 | end | 805 | end |
| 806 | end | 806 | end |
| 807 | mcast_util.pub_world(actionCodes.Role_chat, MsgPack.pack(response)) | 807 | mcast_util.pub_world(actionCodes.Role_chat, MsgPack.pack(response)) |
| 808 | - pcall(skynet.send, '.GLOBALD', "lua", "sendWorldMsg", role._channelIdx, response) | 808 | + pcall(skynet.send, '.globald', "lua", "sendWorldMsg", role._channelIdx, response) |
| 809 | end, | 809 | end, |
| 810 | -- 私聊 | 810 | -- 私聊 |
| 811 | [2] = function () | 811 | [2] = function () |
src/agent.lua
| @@ -8,14 +8,13 @@ require "skynet.manager" | @@ -8,14 +8,13 @@ require "skynet.manager" | ||
| 8 | local queue = require "skynet.queue" | 8 | local queue = require "skynet.queue" |
| 9 | local netpack = require "skynet.netpack" | 9 | local netpack = require "skynet.netpack" |
| 10 | local socket = require "skynet.socket" | 10 | local socket = require "skynet.socket" |
| 11 | -local sharedata = require "skynet.sharedata" | ||
| 12 | local xxtea = require "xxtea" | 11 | local xxtea = require "xxtea" |
| 13 | 12 | ||
| 14 | skynet = require "skynet" | 13 | skynet = require "skynet" |
| 15 | redisproxy = require "shared.redisproxy" | 14 | redisproxy = require "shared.redisproxy" |
| 16 | datacenter = require "skynet.datacenter" | 15 | datacenter = require "skynet.datacenter" |
| 17 | mcast_util = require "services/mcast_util" | 16 | mcast_util = require "services/mcast_util" |
| 18 | -globalCsv = require "csvdata/GlobalDefine" | 17 | +csvdb = require "shared.csvdata" |
| 19 | 18 | ||
| 20 | local CMD = {} | 19 | local CMD = {} |
| 21 | local agentInfo = {} -- { client_fd, role, gate_serv, open_timer} | 20 | local agentInfo = {} -- { client_fd, role, gate_serv, open_timer} |
| @@ -217,7 +216,7 @@ skynet.register_protocol { | @@ -217,7 +216,7 @@ skynet.register_protocol { | ||
| 217 | 216 | ||
| 218 | skynet.register_protocol { | 217 | skynet.register_protocol { |
| 219 | name = "role", | 218 | name = "role", |
| 220 | - id = 13, | 219 | + id = 101, |
| 221 | pack = skynet.pack, | 220 | pack = skynet.pack, |
| 222 | unpack = skynet.unpack, | 221 | unpack = skynet.unpack, |
| 223 | dispatch = function(session, address, submethod, ...) | 222 | dispatch = function(session, address, submethod, ...) |
| @@ -326,20 +325,19 @@ skynet.start(function() | @@ -326,20 +325,19 @@ skynet.start(function() | ||
| 326 | end | 325 | end |
| 327 | end) | 326 | end) |
| 328 | 327 | ||
| 329 | - redisd = skynet.localname(".REDIS") | 328 | + redisd = skynet.localname(".redis") |
| 330 | if tonumber(skynet.getenv "logd") == 1 then | 329 | if tonumber(skynet.getenv "logd") == 1 then |
| 331 | - logd = skynet.localname(".LOGD") | 330 | + logd = skynet.localname(".log") |
| 332 | end | 331 | end |
| 333 | 332 | ||
| 334 | cs = queue() | 333 | cs = queue() |
| 335 | 334 | ||
| 336 | - csvdb = sharedata.query("csvdata") | ||
| 337 | - pvpd = skynet.localname(".PVPCROSS") | 335 | + pvpd = skynet.localname(".pvpcross") |
| 338 | -- 错误码特殊处理 | 336 | -- 错误码特殊处理 |
| 339 | -- todo | 337 | -- todo |
| 340 | -- for key, value in pairs(csvdb["sys_codesCsv"]) do | 338 | -- for key, value in pairs(csvdb["sys_codesCsv"]) do |
| 341 | -- _G[string.upper(value.varname)] = key | 339 | -- _G[string.upper(value.varname)] = key |
| 342 | -- end | 340 | -- end |
| 343 | - | 341 | + globalCsv = csvdb["GlobalDefineCsv"] |
| 344 | agent_util = require "services/agent_util" | 342 | agent_util = require "services/agent_util" |
| 345 | end) | 343 | end) |
src/services/chated.lua
| @@ -35,12 +35,13 @@ if mode == "sub" then | @@ -35,12 +35,13 @@ if mode == "sub" then | ||
| 35 | skynet.ret(skynet.pack(f(...))) | 35 | skynet.ret(skynet.pack(f(...))) |
| 36 | end) | 36 | end) |
| 37 | 37 | ||
| 38 | - skynet.register(string.format(".CHATED%d", id)) | 38 | + skynet.register(string.format(".chated%d", id)) |
| 39 | end) | 39 | end) |
| 40 | else | 40 | else |
| 41 | skynet.start(function() | 41 | skynet.start(function() |
| 42 | - local ok, forbidNames = pcall(require, "csvdata.forbid_chat") | ||
| 43 | - if not ok then forbidNames = {} end | 42 | + local csvdb = require "shared.csvdata" |
| 43 | + local forbidNames = csvdb["forbid_chatCsv"] | ||
| 44 | + if not forbidNames then forbidNames = {} end | ||
| 44 | 45 | ||
| 45 | local words = {} | 46 | local words = {} |
| 46 | for _, data in ipairs(forbidNames) do | 47 | for _, data in ipairs(forbidNames) do |
src/services/csvdatad.lua deleted
| @@ -1,115 +0,0 @@ | @@ -1,115 +0,0 @@ | ||
| 1 | -local sharedata = require "skynet.sharedata" | ||
| 2 | -local skynet = require "skynet" | ||
| 3 | -local lfs = require "lfs" | ||
| 4 | -local redisproxy = require "shared.redisproxy" | ||
| 5 | -require "shared.init" | ||
| 6 | -require "utils.init" | ||
| 7 | -require "csvdata.init" | ||
| 8 | -require "skynet.manager" | ||
| 9 | -require "RedisKeys" | ||
| 10 | - | ||
| 11 | --- local csvdb = {} | ||
| 12 | - | ||
| 13 | -local function formatFileName(filename) | ||
| 14 | - filename = string.trim(filename) | ||
| 15 | - local basename = filename:match("([^/]+)%.lua$") | ||
| 16 | - if not basename then return end | ||
| 17 | - local loadname = filename:match("^src/([^.]+)%.lua$") | ||
| 18 | - loadname = loadname:gsub('/', '.') | ||
| 19 | - return basename, loadname | ||
| 20 | -end | ||
| 21 | - | ||
| 22 | -local function travCsv(rootPath, pathes) | ||
| 23 | - pathes = pathes or {} | ||
| 24 | - local modified = false | ||
| 25 | - local ok, files, iter = pcall(lfs.dir, rootPath) | ||
| 26 | - if not ok then return modified end | ||
| 27 | - for entry in files, iter do | ||
| 28 | - -- 过滤 . 开始的字符串包括 . .. .git .开头的文件名 | ||
| 29 | - if string.byte(entry, 1) ~= 46 then | ||
| 30 | - local pathfile = rootPath .. '/' .. entry | ||
| 31 | - local attrs = lfs.attributes(pathfile) | ||
| 32 | - if attrs.mode == 'directory' then | ||
| 33 | - modified = travCsv(pathfile, pathes) or modified | ||
| 34 | - else | ||
| 35 | - local basename, loadname = formatFileName(pathfile) | ||
| 36 | - if basename then | ||
| 37 | - if tonum(pathes[loadname]) < attrs.modification then | ||
| 38 | - modified = true | ||
| 39 | - pathes[loadname] = attrs.modification | ||
| 40 | - end | ||
| 41 | - if basename == "init" or basename == "init_adv" then | ||
| 42 | - require(loadname) | ||
| 43 | - end | ||
| 44 | - end | ||
| 45 | - end | ||
| 46 | - end | ||
| 47 | - end | ||
| 48 | - return modified | ||
| 49 | -end | ||
| 50 | - | ||
| 51 | --- 每分钟检查是否有更改 | ||
| 52 | -local file2timeMap = {} | ||
| 53 | -local function handle_timeout() | ||
| 54 | - if travCsv("src/csvdata", file2timeMap) then | ||
| 55 | - sharedata.update("csvdata", csvdb) | ||
| 56 | - end | ||
| 57 | - skynet.timeout(100*5, handle_timeout) | ||
| 58 | -end | ||
| 59 | - | ||
| 60 | --- 重新加载csvdb | ||
| 61 | - | ||
| 62 | - | ||
| 63 | -local CMD = {} | ||
| 64 | - | ||
| 65 | -function CMD.reload(code) | ||
| 66 | - csvdb = csvdb or {} | ||
| 67 | - | ||
| 68 | - local ok, func = pcall(load, code) | ||
| 69 | - if ok then | ||
| 70 | - ok = pcall(func) | ||
| 71 | - end | ||
| 72 | - if not ok then | ||
| 73 | - skynet.error("reload_csvdata error by code " .. code) | ||
| 74 | - return 'error' | ||
| 75 | - end | ||
| 76 | - | ||
| 77 | - sharedata.update("csvdata", csvdb) | ||
| 78 | - return 'ok' | ||
| 79 | -end | ||
| 80 | - | ||
| 81 | ---更新已经存在的 | ||
| 82 | -function CMD.hotfix(fieldss) | ||
| 83 | - csvdb = csvdb or {} | ||
| 84 | - for _, fields in ipairs(fieldss) do | ||
| 85 | - if #fields >= 3 and (type(fields[#fields]) == 'number' or type(fields[#fields]) == 'string') then | ||
| 86 | - local temp = csvdb | ||
| 87 | - local ok = false | ||
| 88 | - for i = 1, #fields - 1 do | ||
| 89 | - if type(temp) ~= 'table' then break end | ||
| 90 | - if type(fields[i]) ~= 'number' and type(fields[i]) ~= 'string' then break end | ||
| 91 | - if i == #fields - 1 then | ||
| 92 | - if type(temp[fields[i]]) ~= 'number' and type(temp[fields[i]]) ~= 'string' then break end | ||
| 93 | - temp[fields[i]] = fields[#fields] | ||
| 94 | - else | ||
| 95 | - temp = temp[fields[i]] | ||
| 96 | - end | ||
| 97 | - end | ||
| 98 | - end | ||
| 99 | - end | ||
| 100 | - sharedata.update("csvdata", csvdb) | ||
| 101 | - return 'ok' | ||
| 102 | -end | ||
| 103 | - | ||
| 104 | -skynet.start(function () | ||
| 105 | - travCsv("src/csvdata", file2timeMap) | ||
| 106 | - sharedata.new("csvdata", csvdb) | ||
| 107 | - -- handle_timeout() | ||
| 108 | - | ||
| 109 | - skynet.dispatch("lua", function(_, _, command, ...) | ||
| 110 | - local f = CMD[command] | ||
| 111 | - skynet.ret(skynet.pack(f(...))) | ||
| 112 | - end) | ||
| 113 | - | ||
| 114 | - skynet.register(".CSVDATA") | ||
| 115 | -end) |
src/services/dbseed.lua
| 1 | -require "csvdata.init" | ||
| 2 | require "shared.init" | 1 | require "shared.init" |
| 3 | require "utils.init" | 2 | require "utils.init" |
| 4 | require "GlobalVar" | 3 | require "GlobalVar" |
| @@ -9,7 +8,6 @@ require "skynet.manager" | @@ -9,7 +8,6 @@ require "skynet.manager" | ||
| 9 | skynet = require "skynet" | 8 | skynet = require "skynet" |
| 10 | 9 | ||
| 11 | redisproxy = require("shared.redisproxy") | 10 | redisproxy = require("shared.redisproxy") |
| 12 | -globalCsv = require "csvdata/GlobalDefine" | ||
| 13 | 11 | ||
| 14 | SendPacket = function ( ... ) end | 12 | SendPacket = function ( ... ) end |
| 15 | 13 | ||
| @@ -36,7 +34,7 @@ local steps = { | @@ -36,7 +34,7 @@ local steps = { | ||
| 36 | } | 34 | } |
| 37 | 35 | ||
| 38 | skynet.start(function () | 36 | skynet.start(function () |
| 39 | - redisd = skynet.localname(".REDIS") | 37 | + redisd = skynet.localname(".redis") |
| 40 | 38 | ||
| 41 | redisproxy = require("shared.redisproxy") | 39 | redisproxy = require("shared.redisproxy") |
| 42 | 40 | ||
| @@ -46,6 +44,8 @@ skynet.start(function () | @@ -46,6 +44,8 @@ skynet.start(function () | ||
| 46 | skynet.exit() | 44 | skynet.exit() |
| 47 | return | 45 | return |
| 48 | end | 46 | end |
| 47 | + csvdb = require "shared.csvdata" | ||
| 48 | + globalCsv = csvdb["GlobalDefineCsv"] | ||
| 49 | 49 | ||
| 50 | for _, action in ipairs(steps) do | 50 | for _, action in ipairs(steps) do |
| 51 | print(action.desc .. "start ...") | 51 | print(action.desc .. "start ...") |
src/services/globald.lua
| @@ -129,8 +129,8 @@ local function __init__() | @@ -129,8 +129,8 @@ local function __init__() | ||
| 129 | end | 129 | end |
| 130 | end | 130 | end |
| 131 | end) | 131 | end) |
| 132 | - redisd = skynet.localname(".REDIS") | ||
| 133 | - skynet.register(".GLOBALD") | 132 | + redisd = skynet.localname(".redis") |
| 133 | + skynet.register(".globald") | ||
| 134 | 134 | ||
| 135 | end | 135 | end |
| 136 | 136 |
src/services/httpweb.lua
| @@ -8,9 +8,8 @@ skynet = require "skynet" | @@ -8,9 +8,8 @@ skynet = require "skynet" | ||
| 8 | redisproxy = require "shared.redisproxy" | 8 | redisproxy = require "shared.redisproxy" |
| 9 | netpack = require "skynet.netpack" | 9 | netpack = require "skynet.netpack" |
| 10 | datacenter = require "skynet.datacenter" | 10 | datacenter = require "skynet.datacenter" |
| 11 | -sharedata = require "skynet.sharedata" | ||
| 12 | mcast_util = require "services/mcast_util" | 11 | mcast_util = require "services/mcast_util" |
| 13 | -globalCsv = require "csvdata/GlobalDefine" | 12 | +csvdb = require "shared.csvdata" |
| 14 | 13 | ||
| 15 | local socket = require "skynet.socket" | 14 | local socket = require "skynet.socket" |
| 16 | 15 | ||
| @@ -33,7 +32,7 @@ local string = string | @@ -33,7 +32,7 @@ local string = string | ||
| 33 | 32 | ||
| 34 | skynet.register_protocol { | 33 | skynet.register_protocol { |
| 35 | name = "role", | 34 | name = "role", |
| 36 | - id = 13, | 35 | + id = 101, |
| 37 | pack = skynet.pack, | 36 | pack = skynet.pack, |
| 38 | unpack = skynet.unpack, | 37 | unpack = skynet.unpack, |
| 39 | } | 38 | } |
| @@ -54,8 +53,8 @@ end | @@ -54,8 +53,8 @@ end | ||
| 54 | local CMD = require "actions.HttpAction" | 53 | local CMD = require "actions.HttpAction" |
| 55 | 54 | ||
| 56 | local function start() | 55 | local function start() |
| 57 | - redisd = skynet.localname(".REDIS") | ||
| 58 | - csvdb = sharedata.query("csvdata") | 56 | + redisd = skynet.localname(".redis") |
| 57 | + globalCsv = csvdb["GlobalDefineCsv"] | ||
| 59 | 58 | ||
| 60 | local listen_socket = socket.listen("0.0.0.0", port) | 59 | local listen_socket = socket.listen("0.0.0.0", port) |
| 61 | print("Listen web port " .. port) | 60 | print("Listen web port " .. port) |
src/services/logd.lua
src/services/named.lua
| @@ -35,12 +35,13 @@ if mode == "sub" then | @@ -35,12 +35,13 @@ if mode == "sub" then | ||
| 35 | skynet.ret(skynet.pack(f(...))) | 35 | skynet.ret(skynet.pack(f(...))) |
| 36 | end) | 36 | end) |
| 37 | 37 | ||
| 38 | - skynet.register(string.format(".NAMED%d", id)) | 38 | + skynet.register(string.format(".named%d", id)) |
| 39 | end) | 39 | end) |
| 40 | else | 40 | else |
| 41 | skynet.start(function() | 41 | skynet.start(function() |
| 42 | - local ok, forbidNames = pcall(require, "csvdata.forbid_name") | ||
| 43 | - if not ok then forbidNames = {} end | 42 | + local csvdb = require "shared.csvdata" |
| 43 | + local forbidNames = csvdb["forbid_nameCsv"] | ||
| 44 | + if not forbidNames then forbidNames = {} end | ||
| 44 | 45 | ||
| 45 | local words = {} | 46 | local words = {} |
| 46 | for _, data in ipairs(forbidNames) do | 47 | for _, data in ipairs(forbidNames) do |
src/services/pvpd.lua
| @@ -3,13 +3,12 @@ local json = require("shared.json") | @@ -3,13 +3,12 @@ local json = require("shared.json") | ||
| 3 | redisproxy = require("shared.redisproxy") | 3 | redisproxy = require("shared.redisproxy") |
| 4 | local cluster = require "skynet.cluster" | 4 | local cluster = require "skynet.cluster" |
| 5 | local serverId = tonumber(skynet.getenv("servId")) | 5 | local serverId = tonumber(skynet.getenv("servId")) |
| 6 | -local sharedata = require "skynet.sharedata" | ||
| 7 | datacenter = require "skynet.datacenter" | 6 | datacenter = require "skynet.datacenter" |
| 7 | +csvdb = require "shared.csvdata" | ||
| 8 | require "shared.init" | 8 | require "shared.init" |
| 9 | require "utils.init" | 9 | require "utils.init" |
| 10 | require "RedisKeys" | 10 | require "RedisKeys" |
| 11 | require "skynet.manager" | 11 | require "skynet.manager" |
| 12 | -globalCsv = require "csvdata/GlobalDefine" | ||
| 13 | require "GlobalVar" | 12 | require "GlobalVar" |
| 14 | 13 | ||
| 15 | 14 | ||
| @@ -30,7 +29,7 @@ end | @@ -30,7 +29,7 @@ end | ||
| 30 | 29 | ||
| 31 | skynet.register_protocol { | 30 | skynet.register_protocol { |
| 32 | name = "role", | 31 | name = "role", |
| 33 | - id = 13, | 32 | + id = 101, |
| 34 | pack = skynet.pack, | 33 | pack = skynet.pack, |
| 35 | unpack = skynet.unpack, | 34 | unpack = skynet.unpack, |
| 36 | dispatch = function(session, address, submethod, ...) | 35 | dispatch = function(session, address, submethod, ...) |
| @@ -294,7 +293,9 @@ end | @@ -294,7 +293,9 @@ end | ||
| 294 | 293 | ||
| 295 | ------------------------------------------------------ | 294 | ------------------------------------------------------ |
| 296 | function CMD.start() | 295 | function CMD.start() |
| 297 | - redisd = skynet.localname(".REDIS") | 296 | + redisd = skynet.localname(".redis") |
| 297 | + globalCsv = csvdb["GlobalDefineCsv"] | ||
| 298 | + | ||
| 298 | pvpInfo = require("models.Pvpd").new({key = "cross:pvpInfo"}) | 299 | pvpInfo = require("models.Pvpd").new({key = "cross:pvpInfo"}) |
| 299 | pvpInfo:load() | 300 | pvpInfo:load() |
| 300 | end | 301 | end |
| @@ -308,9 +309,8 @@ local function __init__() | @@ -308,9 +309,8 @@ local function __init__() | ||
| 308 | skynet.ret(skynet.pack(f(...))) | 309 | skynet.ret(skynet.pack(f(...))) |
| 309 | end | 310 | end |
| 310 | end) | 311 | end) |
| 311 | - csvdb = sharedata.query("csvdata") | ||
| 312 | 312 | ||
| 313 | - skynet.register(".PVPCROSS") | 313 | + skynet.register(".pvpcross") |
| 314 | end | 314 | end |
| 315 | 315 | ||
| 316 | skynet.start(__init__) | 316 | skynet.start(__init__) |
src/services/redisd.lua
| @@ -24,5 +24,5 @@ skynet.start(function() | @@ -24,5 +24,5 @@ skynet.start(function() | ||
| 24 | skynet.ret(skynet.pack(db[string.lower(cmd)](db, ...))) | 24 | skynet.ret(skynet.pack(db[string.lower(cmd)](db, ...))) |
| 25 | end | 25 | end |
| 26 | end) | 26 | end) |
| 27 | - skynet.register ".REDIS" | 27 | + skynet.register ".redis" |
| 28 | end) | 28 | end) |
| 29 | \ No newline at end of file | 29 | \ No newline at end of file |
src/services/uniond.lua deleted
| @@ -1,143 +0,0 @@ | @@ -1,143 +0,0 @@ | ||
| 1 | -require "shared.init" | ||
| 2 | -require "utils.init" | ||
| 3 | -require "ProtocolCode" | ||
| 4 | -require "GlobalVar" | ||
| 5 | -require "RedisKeys" | ||
| 6 | -require "skynet.manager" | ||
| 7 | - | ||
| 8 | -local sharedata = require "sharedata" | ||
| 9 | -local redisproxy = require "shared.redisproxy" | ||
| 10 | -local datacenter = require "datacenter" | ||
| 11 | -local queue = require "skynet.queue" | ||
| 12 | - | ||
| 13 | -skynet = require "skynet" | ||
| 14 | -globalCsv = require "csvdata.GlobalDefine" | ||
| 15 | - | ||
| 16 | -local table_pack = table.pack | ||
| 17 | -local table_unpack = table.unpack | ||
| 18 | -local string_format = string.format | ||
| 19 | -local pairs = pairs | ||
| 20 | -local ipairs = ipairs | ||
| 21 | -local tonumber = tonumber | ||
| 22 | - | ||
| 23 | --- 维护在线状态 | ||
| 24 | - | ||
| 25 | -local unionInfo, CMD, cs = {}, {} | ||
| 26 | - | ||
| 27 | -skynet.register_protocol { | ||
| 28 | - name = "role", | ||
| 29 | - id = 13, | ||
| 30 | - pack = skynet.pack, | ||
| 31 | - unpack = skynet.unpack, | ||
| 32 | -} | ||
| 33 | - | ||
| 34 | -local function handle_timeout() | ||
| 35 | - local now = skynet.timex() | ||
| 36 | - unionInfo:onTimer(now) | ||
| 37 | - skynet.timeout(100, handle_timeout) | ||
| 38 | -end | ||
| 39 | - | ||
| 40 | ---[[ | ||
| 41 | -getProperties({"field1", "field2", ...}) | ||
| 42 | -return: {field1 = value1, field2 = value2, ...} | ||
| 43 | -------- | ||
| 44 | -setProperties({field1 = value1, field2 = value2, ...}) | ||
| 45 | -]] | ||
| 46 | -function rpcRole(roleId, funcName, ...) | ||
| 47 | - if not unionInfo.members[roleId] then return end | ||
| 48 | - local serv = unionInfo.members[roleId].serv | ||
| 49 | - if serv then | ||
| 50 | - if funcName == "getProperties" then | ||
| 51 | - return skynet.call(serv, "role", funcName, table_unpack(...)) | ||
| 52 | - else | ||
| 53 | - return skynet.call(serv, "role", funcName, ...) | ||
| 54 | - end | ||
| 55 | - else | ||
| 56 | - local rediskey = string_format("role:%d", roleId) | ||
| 57 | - if funcName == "getProperty" then | ||
| 58 | - return redisproxy:hget(rediskey, ...) | ||
| 59 | - elseif funcName == "setProperty" then | ||
| 60 | - return redisproxy:hset(rediskey, ...) | ||
| 61 | - elseif funcName == "getProperties" then | ||
| 62 | - local sRole = require "models.Role" | ||
| 63 | - local fields = table_pack(...) | ||
| 64 | - local rets = redisproxy:hmget(rediskey, table_unpack(fields, 1, fields.n)) | ||
| 65 | - local result = {} | ||
| 66 | - for i=1, fields.n do | ||
| 67 | - local typ = sRole.schema[fields[i]][1] | ||
| 68 | - local def = sRole.schema[fields[i]][2] | ||
| 69 | - if typ == "number" then | ||
| 70 | - result[fields[i]] = tonumber(rets[i] or def) | ||
| 71 | - else | ||
| 72 | - result[fields[i]] = rets[i] | ||
| 73 | - end | ||
| 74 | - end | ||
| 75 | - return result | ||
| 76 | - elseif funcName == "setProperties" then | ||
| 77 | - local fields = ... | ||
| 78 | - local params = {} | ||
| 79 | - for field, value in pairs(fields) do | ||
| 80 | - params[#params+1] = field | ||
| 81 | - params[#params+1] = value | ||
| 82 | - end | ||
| 83 | - return redisproxy:hmset(rediskey, table_unpack(params)) | ||
| 84 | - end | ||
| 85 | - end | ||
| 86 | -end | ||
| 87 | - | ||
| 88 | --- 加载联盟数据 | ||
| 89 | -function CMD.load(unionId) | ||
| 90 | - unionInfo = require("models.Union").new({key = UNION_KEY:format(unionId)}) | ||
| 91 | - unionInfo:load() | ||
| 92 | - unionInfo:loadMembers() | ||
| 93 | -end | ||
| 94 | - | ||
| 95 | --- 创建一个联盟 | ||
| 96 | -function CMD.new(roleId) | ||
| 97 | - local unionId = redisproxy:hincrby("autoincrement_set", "union", 1) | ||
| 98 | - unionInfo = require("models.Union").new({ | ||
| 99 | - key = UNION_KEY:format(unionId), | ||
| 100 | - master = roleId | ||
| 101 | - }) | ||
| 102 | - unionInfo:create() | ||
| 103 | - unionInfo:addMember(roleId, true) | ||
| 104 | - redisproxy:sadd(UNION_SET, unionId) | ||
| 105 | - return unionId | ||
| 106 | -end | ||
| 107 | - | ||
| 108 | --- 登录/登出 需要向联盟服务报备 | ||
| 109 | -function CMD.sign(cmd, roleId, serv) | ||
| 110 | - if not unionInfo.members[roleId] then return end | ||
| 111 | - if cmd == "login" then | ||
| 112 | - unionInfo.members[roleId].serv = serv | ||
| 113 | - elseif cmd == "logout" then | ||
| 114 | - unionInfo.members[roleId].serv = nil | ||
| 115 | - end | ||
| 116 | -end | ||
| 117 | - | ||
| 118 | -local function __init__() | ||
| 119 | - skynet.dispatch("lua", function(_, _, command, ...) | ||
| 120 | - cs(function (...) | ||
| 121 | - if CMD[command] then | ||
| 122 | - skynet.ret(skynet.pack(CMD[command](...))) | ||
| 123 | - return | ||
| 124 | - else | ||
| 125 | - if unionInfo and unionInfo[submethod] then | ||
| 126 | - if command == 'dismiss' then | ||
| 127 | - unionInfo:dismiss(...) | ||
| 128 | - return | ||
| 129 | - end | ||
| 130 | - local result = unionInfo[submethod](unionInfo, ...) | ||
| 131 | - skynet.ret(skynet.pack(result)) | ||
| 132 | - return | ||
| 133 | - end | ||
| 134 | - end | ||
| 135 | - skynet.error("uniond commond error cmd=", command) | ||
| 136 | - end) | ||
| 137 | - end) | ||
| 138 | - skynet.register("UNIOND") | ||
| 139 | - csvdb = sharedata.query("csvdata") | ||
| 140 | - cs = queue() | ||
| 141 | -end | ||
| 142 | - | ||
| 143 | -skynet.start(__init__) | ||
| 144 | \ No newline at end of file | 0 | \ No newline at end of file |
src/services/watchdog.lua
| @@ -9,6 +9,7 @@ local agent_ctrl = require "services.agent_ctrl" | @@ -9,6 +9,7 @@ local agent_ctrl = require "services.agent_ctrl" | ||
| 9 | local xxtea = require "xxtea" | 9 | local xxtea = require "xxtea" |
| 10 | local mc = require "skynet.multicast" | 10 | local mc = require "skynet.multicast" |
| 11 | local cluster = require "skynet.cluster" | 11 | local cluster = require "skynet.cluster" |
| 12 | +local csvdata = require "shared.csvdata" | ||
| 12 | 13 | ||
| 13 | require "ProtocolCode" | 14 | require "ProtocolCode" |
| 14 | require "GlobalVar" | 15 | require "GlobalVar" |
| @@ -107,12 +108,12 @@ skynet.start(function() | @@ -107,12 +108,12 @@ skynet.start(function() | ||
| 107 | skynet.ret(skynet.pack(f(subcmd, ...))) | 108 | skynet.ret(skynet.pack(f(subcmd, ...))) |
| 108 | end | 109 | end |
| 109 | end) | 110 | end) |
| 110 | - skynet.register ".WATCHDOG" | 111 | + skynet.register ".watchdog" |
| 111 | -- 数据库服务 | 112 | -- 数据库服务 |
| 112 | redisd = skynet.newservice("services/redisd") | 113 | redisd = skynet.newservice("services/redisd") |
| 113 | 114 | ||
| 114 | - -- load all csv data | ||
| 115 | - skynet.newservice("services/csvdatad") | 115 | + -- 提前加载好 |
| 116 | + csvdata.init() | ||
| 116 | print("launch csvdatad ...") | 117 | print("launch csvdatad ...") |
| 117 | 118 | ||
| 118 | -- 日志服务 | 119 | -- 日志服务 |
| @@ -0,0 +1,183 @@ | @@ -0,0 +1,183 @@ | ||
| 1 | +-- 对sharetable 的一层封装 实现热更新 | ||
| 2 | + | ||
| 3 | +local skynet = require "skynet" | ||
| 4 | +local service = require "skynet.service" | ||
| 5 | +local sharetable = require "skynet.sharetable" | ||
| 6 | + | ||
| 7 | +local function sharetable_service() | ||
| 8 | + local skynet = require "skynet" | ||
| 9 | + local sharetable = require "skynet.sharetable" | ||
| 10 | + | ||
| 11 | + local files = {} -- filename | ||
| 12 | + local csvdata = {} | ||
| 13 | + | ||
| 14 | + local initfile = { | ||
| 15 | + ["src/csvdata/init.lua"] = {}, | ||
| 16 | + ["src/csvdata/init_adv.lua"] = {}, | ||
| 17 | + } | ||
| 18 | + | ||
| 19 | + function csvdata.query(source, filename) | ||
| 20 | + files[filename] = files[filename] or {} | ||
| 21 | + files[filename][source] = 1 | ||
| 22 | + end | ||
| 23 | + | ||
| 24 | + function csvdata.close(source) | ||
| 25 | + for filename, info in pairs(files) do | ||
| 26 | + info[source] = nil | ||
| 27 | + end | ||
| 28 | + end | ||
| 29 | + | ||
| 30 | + function csvdata.realName(file) | ||
| 31 | + if string.match(file, "Csv$") then | ||
| 32 | + if initfile["src/csvdata/init.lua"] and initfile["src/csvdata/init.lua"][file] then | ||
| 33 | + file = initfile["src/csvdata/init.lua"][file] | ||
| 34 | + elseif initfile["src/csvdata/init_adv.lua"] and initfile["src/csvdata/init_adv.lua"][file] then | ||
| 35 | + file = initfile["src/csvdata/init_adv.lua"][file] | ||
| 36 | + end | ||
| 37 | + file = "src/" .. file .. ".lua" | ||
| 38 | + end | ||
| 39 | + return file | ||
| 40 | + end | ||
| 41 | + | ||
| 42 | + function csvdata.hotfix(_, ...) | ||
| 43 | + local now = skynet.timex() | ||
| 44 | + | ||
| 45 | + local filenames = {...} | ||
| 46 | + | ||
| 47 | + local needHotfix = {} | ||
| 48 | + for _, filename in ipairs(filenames) do | ||
| 49 | + -- 更新下 | ||
| 50 | + skynet.error(string.format("hotfix_csvdata time: %s, file: %s", now, filename)) | ||
| 51 | + | ||
| 52 | + if initfile[filename] then | ||
| 53 | + sharetable.loadfile(filename) | ||
| 54 | + sharetable.update(filename) | ||
| 55 | + else | ||
| 56 | + sharetable.loadfile(csvdata.realName(filename)) | ||
| 57 | + end | ||
| 58 | + | ||
| 59 | + if files[filename] then | ||
| 60 | + for source, _ in pairs(files[filename]) do | ||
| 61 | + needHotfix[source] = needHotfix[source] or {} | ||
| 62 | + table.insert(needHotfix[source], filename) | ||
| 63 | + end | ||
| 64 | + end | ||
| 65 | + end | ||
| 66 | + | ||
| 67 | + for source, files in pairs(needHotfix) do | ||
| 68 | + skynet.send(source, "csvdata", "hotfix", table.unpack(files)) | ||
| 69 | + end | ||
| 70 | + end | ||
| 71 | + | ||
| 72 | + skynet.dispatch("lua", function(_,source,cmd,...) | ||
| 73 | + skynet.ignoreret() | ||
| 74 | + csvdata[cmd](source,...) | ||
| 75 | + end) | ||
| 76 | + | ||
| 77 | + skynet.register_protocol { | ||
| 78 | + name = "csvdata", | ||
| 79 | + id = 102, | ||
| 80 | + pack = skynet.pack, | ||
| 81 | + unpack = skynet.unpack, | ||
| 82 | + } | ||
| 83 | + | ||
| 84 | + -- 初始化csvdata | ||
| 85 | + skynet.start(function() | ||
| 86 | + for file, _ in pairs(initfile) do | ||
| 87 | + sharetable.loadfile(file) | ||
| 88 | + local init = sharetable.query(file) | ||
| 89 | + if not init then | ||
| 90 | + error("csvdata load init file error " .. file) | ||
| 91 | + return | ||
| 92 | + end | ||
| 93 | + initfile[file] = init | ||
| 94 | + for _, one in pairs(init) do | ||
| 95 | + sharetable.loadfile("src/" .. one .. ".lua") | ||
| 96 | + end | ||
| 97 | + end | ||
| 98 | + end) | ||
| 99 | +end | ||
| 100 | + | ||
| 101 | + | ||
| 102 | +local cache = {} | ||
| 103 | +local csvdata | ||
| 104 | + | ||
| 105 | +local function load_csvdata(t, key) | ||
| 106 | + if key == "address" then | ||
| 107 | + t.address = service.new("csvdata", sharetable_service) | ||
| 108 | + return t.address | ||
| 109 | + else | ||
| 110 | + if cache[key] then return cache[key] end | ||
| 111 | + | ||
| 112 | + local realName = csvdata.realName(key) | ||
| 113 | + | ||
| 114 | + local tab = sharetable.query(realName) | ||
| 115 | + if not tab then | ||
| 116 | + error("dont have csvdata : " .. realName) | ||
| 117 | + return | ||
| 118 | + end | ||
| 119 | + cache[key] = tab | ||
| 120 | + -- 增加引用 | ||
| 121 | + skynet.send(csvdata.address, "lua", "query", key) | ||
| 122 | + return tab | ||
| 123 | + end | ||
| 124 | +end | ||
| 125 | + | ||
| 126 | +local function close_hotfix(t) | ||
| 127 | + local addr = rawget(t, "address") | ||
| 128 | + if addr then | ||
| 129 | + skynet.send(addr, "lua", "close") | ||
| 130 | + end | ||
| 131 | +end | ||
| 132 | + | ||
| 133 | +csvdata = setmetatable ( {} , { | ||
| 134 | + __index = load_csvdata, | ||
| 135 | + __gc = close_hotfix, | ||
| 136 | +}) | ||
| 137 | + | ||
| 138 | +function csvdata.init() | ||
| 139 | + return csvdata.address | ||
| 140 | +end | ||
| 141 | + | ||
| 142 | +function csvdata.hotfix(...) | ||
| 143 | + skynet.send(csvdata.address, "lua", "hotfix", ...) | ||
| 144 | +end | ||
| 145 | + | ||
| 146 | +function csvdata.realName(file) | ||
| 147 | + if string.match(file, "Csv$") then | ||
| 148 | + if csvdata["src/csvdata/init.lua"] and csvdata["src/csvdata/init.lua"][file] then | ||
| 149 | + file = csvdata["src/csvdata/init.lua"][file] | ||
| 150 | + elseif csvdata["src/csvdata/init_adv.lua"] and csvdata["src/csvdata/init_adv.lua"][file] then | ||
| 151 | + file = csvdata["src/csvdata/init_adv.lua"][file] | ||
| 152 | + end | ||
| 153 | + file = "src/" .. file .. ".lua" | ||
| 154 | + end | ||
| 155 | + return file | ||
| 156 | +end | ||
| 157 | + | ||
| 158 | +local function update(file) | ||
| 159 | + -- 更新一下 | ||
| 160 | + if cache[file] then | ||
| 161 | + sharetable.update(csvdata.realName(file)) | ||
| 162 | + end | ||
| 163 | +end | ||
| 164 | + | ||
| 165 | +skynet.register_protocol { | ||
| 166 | + name = "csvdata", | ||
| 167 | + id = 102, | ||
| 168 | + pack = skynet.pack, | ||
| 169 | + unpack = skynet.unpack, | ||
| 170 | + dispatch = function(_, _, cmd, ...) | ||
| 171 | + skynet.ignoreret() | ||
| 172 | + if cmd == "hotfix" then | ||
| 173 | + -- skynet.error("csvdara hotfix update", ...) | ||
| 174 | + local files = {...} | ||
| 175 | + for _, file in ipairs(files) do | ||
| 176 | + update(file) | ||
| 177 | + end | ||
| 178 | + return | ||
| 179 | + end | ||
| 180 | + end, | ||
| 181 | +} | ||
| 182 | + | ||
| 183 | +return csvdata |