Commit a5486ede2d28fbf4981c678624674dc690d6d45d

Authored by zhouhaihai
1 parent 65421af2

csvdata 修改为 sharetable

1 -Subproject commit dce531485f84bb7a555e9bb35b22c58fb469192c 1 +Subproject commit 7d39312ae9d50054c4b8dbb675da8024ccb5a834
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 ()
@@ -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 &quot;skynet.manager&quot; @@ -9,7 +8,6 @@ require &quot;skynet.manager&quot;
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 &quot;skynet&quot; @@ -8,9 +8,8 @@ skynet = require &quot;skynet&quot;
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
@@ -108,7 +108,7 @@ local function __init__() @@ -108,7 +108,7 @@ local function __init__()
108 end) 108 end)
109 cs = queue() 109 cs = queue()
110 110
111 - skynet.register(".LOGD") 111 + skynet.register(".log")
112 end 112 end
113 113
114 skynet.start(__init__) 114 skynet.start(__init__)
src/services/named.lua
@@ -35,12 +35,13 @@ if mode == &quot;sub&quot; then @@ -35,12 +35,13 @@ if mode == &quot;sub&quot; 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(&quot;shared.json&quot;) @@ -3,13 +3,12 @@ local json = require(&quot;shared.json&quot;)
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 &quot;services.agent_ctrl&quot; @@ -9,6 +9,7 @@ local agent_ctrl = require &quot;services.agent_ctrl&quot;
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 -- 日志服务
src/shared/csvdata.lua 0 → 100644
@@ -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