222a7d5f
 
  zhouhaihai
 
httpGm
 | 
1 
 | 
  
 
 | 
3fe4471e
 
  zhouhaihai
 
热更新 demo
 | 
2
3 
 | 
  local _M = {}
  
 
 | 
2d392ede
 
  zhouhaihai
 
热更新 最终版
 | 
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 
 | 
  
  --[=[使用python 调用的话eg:
  
  	import requests
  
  	@params 指处理方法中的 query
  	@data 指处理方法中的 body
  	@return 'success' 成功
  
  	status = requests.post("http://127.0.0.1:8001/clearcache", params = {"key": "zhaolu1234dangge"}, data = "", timeout = 300).text
  
  	if status != 'success' :
  		print("错误")
  ]=]
  
  
 
 | 
2d392ede
 
  zhouhaihai
 
热更新 最终版
 | 
20
21
22 
 | 
  --[=[
  	解码后
  	body = {
 
 | 
a5486ede
 
  zhouhaihai
 
csvdata 修改为 share...
 | 
23
24
25 
 | 
  		"src/csvdata/init.lua",
  		"unitCsv",
  		"story_cgCsv",
 
 | 
2d392ede
 
  zhouhaihai
 
热更新 最终版
 | 
26
27
28
29
30
31
32
33
34
35
36 
 | 
  	}
  ]=]
  function _M.hotfix_csvdata(query, body)
  	if not body or body == "" then
  		return 'no body'
  	end
  
  	local ok, result = pcall(json.decode, body)
  	if not ok or type(result) ~= 'table' then
  		return "decode error"
  	end
 
 | 
2d392ede
 
  zhouhaihai
 
热更新 最终版
 | 
37 
 | 
  
 
 | 
a5486ede
 
  zhouhaihai
 
csvdata 修改为 share...
 | 
38
39
40 
 | 
  	csvdb.hotfix(table.unpack(result))
  
  	return 'success'
 
 | 
2d392ede
 
  zhouhaihai
 
热更新 最终版
 | 
41 
 | 
  end
 
 | 
3fe4471e
 
  zhouhaihai
 
热更新 demo
 | 
42
43
44
45 
 | 
  
  -- 热更新代码  -- 针对 agent 执行发送过来的代码 -- 代码要规范~ 
  
  --[=[ eg:
 
 | 
5e5d7680
 
  zhouhaihai
 
热更新 优化
 | 
46
47
48
49
50
51
52
53 
 | 
  1. *Action 
  	body = """
  		_hotfixActions = _hotfixActions or {}
  		_hotfixActions["Gm.clientRequest"] = function(agent, data)
  			bin = MsgPack.pack({ cmd = "testtest" })
  			SendPacket(actionCodes.Gm_receiveResponse, bin)
  		end
  	"""
 
 | 
3fe4471e
 
  zhouhaihai
 
热更新 demo
 | 
54
55
56
57
58
59 
 | 
  
  2. 修改 global 方法 和 变量 直接覆盖
  	body = """
  		function a()
  			print(123)
  		end
 
 | 
5e5d7680
 
  zhouhaihai
 
热更新 优化
 | 
60
61
62
63 
 | 
  
  		globalCsv["asdasd"] = 12
  
  		HEHE = 123
 
 | 
3fe4471e
 
  zhouhaihai
 
热更新 demo
 | 
64
65 
 | 
  	"""
  
 
 | 
2d392ede
 
  zhouhaihai
 
热更新 最终版
 | 
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82 
 | 
  3. 修改 class 类 方法
  	1. 修改role的方法
  	body = """
  		local role = ...
  		_hotfixClass = _hotfixClass or {}
  		_hotfixClass["Role"] = _hotfixClass["Role"] or {}
  		local hotfixFunc = function(hotfixclass)
  			function hotfixclass:getItemCount(itemId)
  				return self:getProperty("id") .. "__" .. self:getProperty("uid") .. "__" .. itemId
  			end
  		end
  		table.insert(_hotfixClass["Role"], hotfixFunc)
  		if role then
  			hotfixFunc(role)
  		end
  	"""
  	2. 修改hero的方法
 
 | 
3fe4471e
 
  zhouhaihai
 
热更新 demo
 | 
83 
 | 
  	body = """
 
 | 
2d392ede
 
  zhouhaihai
 
热更新 最终版
 | 
84
85
86
87
88
89
90
91
92
93
94
95
96
97 
 | 
  		local role = ...
  		_hotfixClass = _hotfixClass or {}
  		_hotfixClass["Hero"] = _hotfixClass["Hero"] or {}
  		local hotfixFunc = function(hotfixclass)
  			function hotfixclass:getBattleValue()
  				return self:getProperty("id") + "98700000000"
  			end
  		end
  		table.insert(_hotfixClass["Hero"], hotfixFunc)
  		if role and role.heros then
  			for _, hero in pairs(role.heros) do
  				hotfixFunc(hero)
  			end
  		end
 
 | 
3fe4471e
 
  zhouhaihai
 
热更新 demo
 | 
98 
 | 
  	"""
 
 | 
2d392ede
 
  zhouhaihai
 
热更新 最终版
 | 
99
100 
 | 
  
  	3. 其他的类仿照上面的写法
 
 | 
3fe4471e
 
  zhouhaihai
 
热更新 demo
 | 
101
102 
 | 
  ]=]
  
 
 | 
2d392ede
 
  zhouhaihai
 
热更新 最终版
 | 
103 
 | 
  function _M.hotfix_code(query, body)
 
 | 
3fe4471e
 
  zhouhaihai
 
热更新 demo
 | 
104 
 | 
  	if not body or body == "" then
 
 | 
2d392ede
 
  zhouhaihai
 
热更新 最终版
 | 
105 
 | 
  		return "no body"
 
 | 
3fe4471e
 
  zhouhaihai
 
热更新 demo
 | 
106 
 | 
  	end
 
 | 
3fe4471e
 
  zhouhaihai
 
热更新 demo
 | 
107 
 | 
  	local ok = pcall(load, body)
 
 | 
2d392ede
 
  zhouhaihai
 
热更新 最终版
 | 
108
109
110 
 | 
  	if not ok then 
  		return "code error"
  	end
 
 | 
5e5d7680
 
  zhouhaihai
 
热更新 优化
 | 
111 
 | 
  
 
 | 
2d392ede
 
  zhouhaihai
 
热更新 最终版
 | 
112 
 | 
  	skynet.error(string.format("hotfix_code time: %s, code: %s", skynet.timex(), body))
 
 | 
5e5d7680
 
  zhouhaihai
 
热更新 优化
 | 
113 
 | 
  	
 
 | 
a5486ede
 
  zhouhaihai
 
csvdata 修改为 share...
 | 
114 
 | 
  	pcall(skynet.call, '.watchdog', "lua", "hotfix", body)
 
 | 
3fe4471e
 
  zhouhaihai
 
热更新 demo
 | 
115
116
117 
 | 
  	return 'success'
  end
  
 
 | 
222a7d5f
 
  zhouhaihai
 
httpGm
 | 
118
119
120
121
122
123
124
125 
 | 
  local function proc_online(cmd, roleId, pms)
  	local agent = datacenter.get("agent", roleId)
  	if agent then
  		local ok, result = pcall(skynet.call, agent.serv, "lua", cmd, pms)
  		return ok and result or "指令在线失败"
  	end
  	return "not_online"
  end
 
 | 
3fe4471e
 
  zhouhaihai
 
热更新 demo
 | 
126 
 | 
  
 
 | 
222a7d5f
 
  zhouhaihai
 
httpGm
 | 
127
128
129
130
131
132
133
134
135 
 | 
  function _M.gm_action(query)
  	local gmFuncs = require "actions.GmAction"
  	if not query.cmd or not query.id or not gmFuncs[query.cmd] then return "指令不存在" end
  	-- 在线操作
  	query.id = tonumber(query.id)
  	local isOn = proc_online(query.cmd, query.id, query)
  	if isOn ~= "not_online" then
  		return isOn
  	end
 
 | 
222a7d5f
 
  zhouhaihai
 
httpGm
 | 
136
137
138
139
140
141
142 
 | 
  	-- 离线操作
  	local role = require("models.Role").new({key = string.format("role:%d", query.id)})
  	local ret = role:load()
  	if not ret then
  		return "角色不存在"
  	end
  	role:loadAll()
 
 | 
3133cb76
 
  zhouhaihai
 
日志
 | 
143
144
145
146
147 
 | 
  	role:startActionUcode()
  	local status = gmFuncs[query.cmd](role, query)
  	role:endActionUcode()
  	
  	return status
 
 | 
222a7d5f
 
  zhouhaihai
 
httpGm
 | 
148 
 | 
  end
 
 | 
3fe4471e
 
  zhouhaihai
 
热更新 demo
 | 
149 
 | 
  
 
 | 
b23cd820
 
  zhouhaihai
 
查询角色
 | 
150
151
152
153 
 | 
  function _M.query_role(query)
  	if not query.uid then return "not found" end
  	local user = redisproxy:get(string.format("uid:%s", query.uid))
  	if not user then return "not found" end
 
 | 
3fdfef30
 
  zhouhaihai
 
httpweb
 | 
154 
 | 
  	local roleId = redisproxy:get(string.format("user:%s", string.upper(user)))
 
 | 
b23cd820
 
  zhouhaihai
 
查询角色
 | 
155
156
157
158 
 | 
  	if not roleId then return "not found" end
  	return json.encode({roleId, user})
  end
  
 
 | 
c763e563
 
  zhouhaihai
 
删除NGX
 | 
159 
 | 
  function _M.broadcast(query)
 
 | 
5a7e4d88
 
  zhouhaihai
 
自定义维护公告
 | 
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181 
 | 
  	local msg = {}
  	local handle = {
  		["common"] = {
  			code = actionCodes.Sys_commonNotice,
  			exec = function()
  				msg["body"] = query.content
  			end
  		},
  		["maintain"] = {
  			code = actionCodes.Sys_maintainNotice,
  			exec = function()
  				msg["body"] = query.content
  			end
  		},
  		["custom"] = {
  			code = actionCodes.Sys_customNotice,
  			exec = function()
  				msg["title"] = query.title
  				msg["body"] = query.content
  				msg["logout"] = query.logout
  			end
  		}
 
 | 
c763e563
 
  zhouhaihai
 
删除NGX
 | 
182 
 | 
  	}
 
 | 
5a7e4d88
 
  zhouhaihai
 
自定义维护公告
 | 
183
184
185 
 | 
  	if not handle[query.cmd] then return "错误" end
  	handle[query.cmd].exec()
  	mcast_util.pub_world(handle[query.cmd].code, MsgPack.pack(msg))
 
 | 
c763e563
 
  zhouhaihai
 
删除NGX
 | 
186
187
188 
 | 
  	return "广播成功"
  end
  
 
 | 
59acc11e
 
  zhouhaihai
 
赛季更新
 | 
189
190
191
192
193 
 | 
  function _M.endless_season_check()
  	mcast_util.pub_world(actionCodes.Sys_endlessSeason, "")
  	return "success"
  end
  
 
 | 
c763e563
 
  zhouhaihai
 
删除NGX
 | 
194
195
196
197
198 
 | 
  function _M.online(query)
  	local count = datacenter.get("onlineCount") or 0
  	return count
  end
  
 
 | 
3b903aa0
 
  zhouhaihai
 
队列长度
 | 
199
200
201 
 | 
  function _M.dbqlen(query)
  	return skynet.call(redisd, "debug", "INFO")
  end
 
 | 
c763e563
 
  zhouhaihai
 
删除NGX
 | 
202 
 | 
  
 
 | 
c7ecb87f
 
  zhouhaihai
 
添加 测试账号 方法
 | 
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220 
 | 
  function _M.account_init(query, body)
  	if not query.id  or not body or body == "" then return "指令不存在" end
  
  	local ok, result = pcall(json.decode, body)
  	if not ok or type(result) ~= 'table' then
  		return "decode body error"
  	end
  	query.id = tonumber(query.id)
  	local agent = datacenter.get("agent", query.id)
  	if agent and agent.serv then
  		-- local ok, result = pcall(skynet.call, agent.serv, "role", "accountInit", result)
  		-- return ok and result or "指令在线失败"
  		skynet.call(agent.serv, "role", "accountInit", result)
  		return "成功"
  	else
  		return "角色不在线"
  	end
  end
 
 | 
3fe4471e
 
  zhouhaihai
 
热更新 demo
 | 
221
222 
 | 
  
  return _M
 
 |