Commit c7c5571b41739c007bc042a119c05fb44348efab
Merge branch 'develop' into qa
Showing
2 changed files
with
28 additions
and
5 deletions
Show diff stats
src/adv/AdvBattle.lua
@@ -61,7 +61,7 @@ end | @@ -61,7 +61,7 @@ end | ||
61 | 61 | ||
62 | function Battle:initPlayer() | 62 | function Battle:initPlayer() |
63 | local advTeam = self.adv.owner:getProperty("advTeam") | 63 | local advTeam = self.adv.owner:getProperty("advTeam") |
64 | - if not next(advTeam.heros) then return end | 64 | + if not advTeam.heros or not next(advTeam.heros) then return end |
65 | local leaderPassive = {} | 65 | local leaderPassive = {} |
66 | local player = advTeam.player | 66 | local player = advTeam.player |
67 | if not player then | 67 | if not player then |
src/agent.lua
@@ -24,6 +24,8 @@ local agent_util, cs | @@ -24,6 +24,8 @@ local agent_util, cs | ||
24 | _hotfixActions = _hotfixActions or {} | 24 | _hotfixActions = _hotfixActions or {} |
25 | _hotfixClass = _hotfixClass or {} | 25 | _hotfixClass = _hotfixClass or {} |
26 | 26 | ||
27 | +_codeSession = {} | ||
28 | + | ||
27 | --- {{{ 定时器相关 | 29 | --- {{{ 定时器相关 |
28 | local function handle_timeout() | 30 | local function handle_timeout() |
29 | if not agentInfo.open_timer then return end | 31 | if not agentInfo.open_timer then return end |
@@ -48,6 +50,7 @@ function cancel_agent_timer() | @@ -48,6 +50,7 @@ function cancel_agent_timer() | ||
48 | end | 50 | end |
49 | ---- 定时器相关 }}} | 51 | ---- 定时器相关 }}} |
50 | 52 | ||
53 | + | ||
51 | local _pipelinings = {} --可同时多个序列 栈的形式保证嵌套不出错 | 54 | local _pipelinings = {} --可同时多个序列 栈的形式保证嵌套不出错 |
52 | function SendPacket(actionCode, bin, client_fd) | 55 | function SendPacket(actionCode, bin, client_fd) |
53 | -- 内部消息不扩散出去 | 56 | -- 内部消息不扩散出去 |
@@ -57,22 +60,31 @@ function SendPacket(actionCode, bin, client_fd) | @@ -57,22 +60,31 @@ function SendPacket(actionCode, bin, client_fd) | ||
57 | end | 60 | end |
58 | return | 61 | return |
59 | end | 62 | end |
60 | - | ||
61 | - | 63 | + |
62 | client_fd = client_fd or agentInfo.client_fd | 64 | client_fd = client_fd or agentInfo.client_fd |
63 | 65 | ||
64 | local handlerName = actionHandlers[actionCode] | 66 | local handlerName = actionHandlers[actionCode] |
65 | - if string.sub(handlerName, -3, -1) == "Rpc" then | 67 | + local isRpc = string.sub(handlerName, -3, -1) == "Rpc" |
68 | + local session = _codeSession[actionCode] or 0 | ||
69 | + if isRpc then | ||
66 | actionCode = actionCode + rpcResponseBegin | 70 | actionCode = actionCode + rpcResponseBegin |
67 | end | 71 | end |
72 | + | ||
68 | -- 查看是否是在 流水线操作中 | 73 | -- 查看是否是在 流水线操作中 |
69 | if #_pipelinings > 0 then | 74 | if #_pipelinings > 0 then |
70 | local _curPipelining = _pipelinings[#_pipelinings] | 75 | local _curPipelining = _pipelinings[#_pipelinings] |
71 | _curPipelining[client_fd] = _curPipelining[client_fd] or {} --区分不同客户端 | 76 | _curPipelining[client_fd] = _curPipelining[client_fd] or {} --区分不同客户端 |
72 | - table.insert(_curPipelining[client_fd], {actionCode, bin}) | 77 | + if not isRpc then |
78 | + session = nil | ||
79 | + end | ||
80 | + table.insert(_curPipelining[client_fd], {actionCode, bin, session}) | ||
73 | else | 81 | else |
74 | if #bin > 0 then bin = xxtea.encrypt(bin, XXTEA_KEY) end | 82 | if #bin > 0 then bin = xxtea.encrypt(bin, XXTEA_KEY) end |
75 | local head = string.pack("H", actionCode) | 83 | local head = string.pack("H", actionCode) |
84 | + if isRpc then | ||
85 | + -- 是回复 -- 有session号 | ||
86 | + head = head .. string.pack("H", session) | ||
87 | + end | ||
76 | return socket.write(client_fd, netpack.pack(head .. bin)) | 88 | return socket.write(client_fd, netpack.pack(head .. bin)) |
77 | end | 89 | end |
78 | end | 90 | end |
@@ -153,6 +165,7 @@ function rpcOtherUnion(id, funcName, ...) | @@ -153,6 +165,7 @@ function rpcOtherUnion(id, funcName, ...) | ||
153 | end | 165 | end |
154 | end | 166 | end |
155 | 167 | ||
168 | + | ||
156 | skynet.register_protocol { | 169 | skynet.register_protocol { |
157 | name = "client", | 170 | name = "client", |
158 | id = skynet.PTYPE_CLIENT, | 171 | id = skynet.PTYPE_CLIENT, |
@@ -175,6 +188,13 @@ skynet.register_protocol { | @@ -175,6 +188,13 @@ skynet.register_protocol { | ||
175 | return | 188 | return |
176 | end | 189 | end |
177 | 190 | ||
191 | + if string.sub(actionName, -3, -1) == "Rpc" then | ||
192 | + -- 是请求 -- 有session号 | ||
193 | + local codeSession = string.unpack("H", string.sub(data, 1, 2)) | ||
194 | + _codeSession[cmd] = codeSession | ||
195 | + data = string.sub(data, 3) | ||
196 | + end | ||
197 | + | ||
178 | local method | 198 | local method |
179 | if _hotfixActions[actionName] then | 199 | if _hotfixActions[actionName] then |
180 | method = _hotfixActions[actionName] | 200 | method = _hotfixActions[actionName] |
@@ -207,6 +227,9 @@ skynet.register_protocol { | @@ -207,6 +227,9 @@ skynet.register_protocol { | ||
207 | agentInfo.role:endActionUcode() | 227 | agentInfo.role:endActionUcode() |
208 | end | 228 | end |
209 | 229 | ||
230 | + -- 清掉请求session | ||
231 | + _codeSession[cmd] = nil | ||
232 | + | ||
210 | if not result or type(result) == "number" then | 233 | if not result or type(result) == "number" then |
211 | SendPacket(actionCodes.Sys_innerErrorMsg, MsgPack.pack({id = cmd * 100 + (result or 0)})) | 234 | SendPacket(actionCodes.Sys_innerErrorMsg, MsgPack.pack({id = cmd * 100 + (result or 0)})) |
212 | end | 235 | end |