Commit c779be0c96f406489111203620f1a977aff5ffe8
1 parent
da898074
pvp 中心服务
Showing
2 changed files
with
128 additions
and
1 deletions
Show diff stats
src/nodenames.lua
@@ -0,0 +1,126 @@ | @@ -0,0 +1,126 @@ | ||
1 | +local skynet = require "skynet" | ||
2 | +local json = require("shared.json") | ||
3 | +local redisproxy = require("shared.redisproxy") | ||
4 | +local cluster = require "skynet.cluster" | ||
5 | + | ||
6 | +require "shared.init" | ||
7 | +require "utils.init" | ||
8 | +require "RedisKeys" | ||
9 | +require "skynet.manager" | ||
10 | +globalCsv = require "csvdata/GlobalDefine" | ||
11 | +require "GlobalVar" | ||
12 | + | ||
13 | + | ||
14 | + | ||
15 | + | ||
16 | + | ||
17 | +function rpcRole(roleId, funcName, ...) | ||
18 | + local fields = ... | ||
19 | + local agent = datacenter.get("agent", roleId) | ||
20 | + if agent and agent.serv then | ||
21 | + if funcName == "getProperties" then | ||
22 | + return skynet.call(agent.serv, "role", funcName, fields) | ||
23 | + else | ||
24 | + return skynet.call(agent.serv, "role", funcName, ...) | ||
25 | + end | ||
26 | + else | ||
27 | + local roleCross = require("models.RoleCross") | ||
28 | + if funcName == "getProperties" then | ||
29 | + return roleCross.handle(funcName, roleId, fields) | ||
30 | + else | ||
31 | + return roleCross.handle(funcName, roleId, ...) | ||
32 | + end | ||
33 | + end | ||
34 | +end | ||
35 | + | ||
36 | +local function upLoadTeams() | ||
37 | + local chatd = cluster.query("center", "chatd") | ||
38 | + if not chatd then | ||
39 | + return | ||
40 | + end | ||
41 | + return pcall(cluster.call, "center", chatd, "test", {serverId = 123, hehe = "asd"}) | ||
42 | +end | ||
43 | + | ||
44 | + | ||
45 | + | ||
46 | + | ||
47 | +local function update() | ||
48 | + local now = skynet.timex() | ||
49 | + local resetData = csvdb["time_resetCsv"][TimeReset.PvpCross] | ||
50 | + | ||
51 | + local oldRound = tonum(redisproxy:hget("pvp_cross", "round"), -100) | ||
52 | + | ||
53 | + local startTime = START_RESET_TIME + curRound * resetData.interval + resetData.start | ||
54 | + local endTime = startTime + (resetData.duration == 0 and resetData.interval or math.min(resetData.interval, resetData.duration)) | ||
55 | + local nextStartTime = startTime + resetData.interval | ||
56 | + | ||
57 | + local updateTime = math.max((nextStartTime - now) / 2, CHECK_PVP_STATUS_INTERVAL) | ||
58 | + -- 已经 上传过阵容了 | ||
59 | + if curRound ~= oldRound then | ||
60 | + -- 跨服竞技场已经结束了 | ||
61 | + if now >= endTime then | ||
62 | + redisproxy:hset("pvp_cross", "round", curRound) | ||
63 | + else | ||
64 | + -- 上传信息 | ||
65 | + local status, back = upLoadTeams() | ||
66 | + if status and back == "success" then --上传成功 | ||
67 | + redisproxy:hset("pvp_cross", "round", curRound) | ||
68 | + else | ||
69 | + updateTime = CHECK_PVP_STATUS_INTERVAL | ||
70 | + end | ||
71 | + end | ||
72 | + end | ||
73 | + return updateTime | ||
74 | +end | ||
75 | + | ||
76 | + | ||
77 | +local CMD = {} | ||
78 | + | ||
79 | +function CMD.start() | ||
80 | + -- check_pvp_update() | ||
81 | +end | ||
82 | + | ||
83 | +local function getDBKey() | ||
84 | + local resetData = csvdb["time_resetCsv"][TimeReset.PvpCross] | ||
85 | + local curRound = math.floor((skynet.timex() - START_RESET_TIME - resetData.start) / resetData.interval) | ||
86 | + local idx = 1 | ||
87 | + if curRound % 2 == 1 then | ||
88 | + idx = 2 | ||
89 | + end | ||
90 | + return RANK_PVP_HIGHT_KEY[idx] | ||
91 | +end | ||
92 | + | ||
93 | +function CMD.loadRoleInfo(roleIds) | ||
94 | + roleIds = roleIds or {} | ||
95 | + local infos = {} | ||
96 | + for _, roleId in ipairs(roleIds) do | ||
97 | + infos[roleId] = rpcRole(roleId, "pvpHInfo") | ||
98 | + end | ||
99 | + return infos | ||
100 | +end | ||
101 | + | ||
102 | +function CMD.loadTeams() | ||
103 | + local dbKey = getDBKey() | ||
104 | + local redret = redisproxy:zrevrange(dbKey, 0, 15) | ||
105 | + local roleIds = {} | ||
106 | + for _, roleId in ipairs(redret) do | ||
107 | + table.insert(roleIds, tonumber(roleId)) | ||
108 | + end | ||
109 | + | ||
110 | + local infos = CMD.loadRoleInfo(roleIds) | ||
111 | + | ||
112 | + return {roleIds = roleIds, infos = infos} | ||
113 | +end | ||
114 | + | ||
115 | +local function __init__() | ||
116 | + skynet.dispatch("lua", function(_, _, command, ...) | ||
117 | + local f = CMD[command] | ||
118 | + if f then | ||
119 | + skynet.ret(skynet.pack(f(...))) | ||
120 | + end | ||
121 | + end) | ||
122 | + redisd = skynet.localname(".REDIS") | ||
123 | + skynet.register(".PVPCROSS") | ||
124 | +end | ||
125 | + | ||
126 | +skynet.start(__init__) |