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 @@ |
| 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__) | ... | ... |