MiddleConnect.lua 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781
  1. -- 跨服鏈接和重连管理
  2. local msg_parse = _G.msg_inner_parse
  3. local Config = require("Config")
  4. local Log = require("common.Log")
  5. local CommonDB = require("common.CommonDB")
  6. local InnerMsg = require("core.InnerMsg")
  7. local MiddleManager = require("middle.MiddleManager")
  8. local MiddleHeartBeat = require("middle.MiddleHeartBeat")
  9. local Define = require("platform.Define")
  10. local Json = require("common.Json")
  11. local JjcLadderMiddle = require("jjcLadder.JjcLadderMiddle")
  12. local WarZoneConf = require("excel.WarZone") --- 战区配置
  13. local ChatHandler = require("chat.Handler")
  14. local MiddleCommonRank = require("middle.MiddleCommonRank")
  15. local BanLogic = require("scene.BanLogic")
  16. IS_MIDDLE_CONNECT = IS_MIDDLE_CONNECT or nil -- 是否連上跨服 收到WLhello才認為連上了
  17. local nServerOffSet = 810538 -- 配置中服务器ID偏移量
  18. YY_ACT_FLAG = nil
  19. -- 请求middleInfo
  20. local s2aParam = {}
  21. local function questMiddleInfo()
  22. s2aParam.sid = Config.SVR_INDEX
  23. s2aParam.api_cbMethod = "setMiddleInfo"
  24. _G.thread_http.send(Define.MIDDLE_INFO_URL, Json.Encode(s2aParam))
  25. end
  26. -- 获取战区最小和最大服务器ID
  27. function MiddleConnect_GetWarZoneServer(nSeverID)
  28. local tWarZoneConf = WarZoneConf.group
  29. if not tWarZoneConf then
  30. return 0, 0
  31. end
  32. for _, v in pairs(tWarZoneConf) do
  33. if v.nMinServerID <= nSeverID and v.nMaxServerID >= nSeverID then
  34. return v.nMinServerID, v.nMaxServerID
  35. end
  36. end
  37. return 0, 0
  38. end
  39. -- 获取战区服务器ID
  40. function MiddleConnect_ConfServerID2TrueServerID(nServerIDConf)
  41. return nServerIDConf + nServerOffSet - 1
  42. end
  43. -- 获取战区配置服务器ID
  44. function MiddleConnect_TrueServerID2ConfServerID(nServerID)
  45. return nServerID - nServerOffSet + 1
  46. end
  47. local function MiddleConnect_GetWarFirstServerFD(nSrcServerID)
  48. local nConfigServerID = MiddleConnect_TrueServerID2ConfServerID(nSrcServerID)
  49. local nWarServerID = MiddleConnect_GetWarZoneServer(nConfigServerID)
  50. if 0 >= nWarServerID then
  51. print("[MiddleConnect_GetWarFirstServerFD] 获取不到对应的战区ID nSrcServerID = "..nSrcServerID
  52. .." nConfigServerID = "..nConfigServerID.." nWarServerID = "..nWarServerID)
  53. return
  54. end
  55. -- 转换成战区真正的ID
  56. nWarServerID = MiddleConnect_ConfServerID2TrueServerID(nWarServerID)
  57. local nWarFD = MiddleManager.getFDBySvrIndex(nWarServerID)
  58. if not nWarFD then
  59. print("[MiddleConnect_GetWarFirstServerFD] 获取不到对应的战区的FD nSrcServerID = "..nSrcServerID
  60. .." nConfigServerID = "..nConfigServerID.." nWarServerID = "..nWarServerID)
  61. return
  62. end
  63. return nWarFD
  64. end
  65. function setMiddleInfo(ip, port, host)
  66. if _G.is_middle == true then return end
  67. local middleDBInfo = CommonDB.getMiddleInfo()
  68. if middleDBInfo.ip == ip and middleDBInfo.port == port and middleDBInfo.host == host then
  69. -- 沒變化
  70. return
  71. end
  72. local oldIp = middleDBInfo.ip
  73. local oldPort = middleDBInfo.port
  74. CommonDB.setMiddleInfo(ip, port, host)
  75. if oldIp == ip and oldPort == port then
  76. -- 只有host变了 不需要重連
  77. return
  78. else
  79. tryConnectMiddle(ip, port) -- try的時候會把之前的鏈接斷開
  80. end
  81. end
  82. function getMiddleInfo()
  83. --调试模式使用配置的IP
  84. if Config.IS_DEBUG then
  85. return Config.MIDDLE_IP, Config.MIDDLE_PORT, Config.MIDDLE_HOST
  86. end
  87. local middleDBInfo = CommonDB.getMiddleInfo()
  88. return middleDBInfo.ip, middleDBInfo.port, middleDBInfo.host
  89. end
  90. function initAfterStart()
  91. onTimer() -- 啟動拉取一下middleInfo
  92. MiddleCommonRank.MiddleCommonRank_InitAfterStart()
  93. local ServerCommerceActBattleGroundCS = require("serverCommerce.ServerCommerceActBattleGroundCS")
  94. ServerCommerceActBattleGroundCS.BattleGround_InitAfterStart()
  95. end
  96. function onTimer()
  97. if _G.is_middle == true then return end
  98. -- 如果没有middleip 去找后台请求middleip 1分钟1次
  99. local ip, port = getMiddleInfo()
  100. if ip == nil then
  101. -- reyes todo get ip
  102. print("no middleInfo try to get")
  103. questMiddleInfo()
  104. return
  105. end
  106. -- 如果ip有了 但是一直没连上 1分钟重连1次
  107. if isConnect() ~= true then
  108. tryConnectMiddle(ip, port)
  109. return
  110. end
  111. -- 如果3分钟之内 没有收到middle的心跳包 并且底层还是连接中的状态 我们认为出故障了 这个时候重连一下middle 这是一个异常处理
  112. if MiddleHeartBeat.LAST_HEARTBEAT_TIME then
  113. local now = os.time()
  114. if now - MiddleHeartBeat.LAST_HEARTBEAT_TIME > 180 then
  115. stopConnectMiddle()
  116. end
  117. end
  118. end
  119. function autoResetMiddle()
  120. if _G.is_middle == true then return end
  121. -- 每周一凌晨2點 斷開鏈接 并且重新取一下php的跨服信息 重新連新跨服
  122. CommonDB.setMiddleInfo(nil, nil, nil)
  123. stopConnectMiddle()
  124. onTimer() -- 拉取一下middleInfo
  125. end
  126. function isConnect()
  127. -- 這個接口和IS_MIDDLE_CONNECT的區別是 這個表示底層鏈接連上了 但是不一定正確收到了middle會包 lua層業務判斷最好別用這個接口 盡量用IS_MIDDLE_CONNECT
  128. local ret = msg_parse.check_connect()
  129. if ret == true then
  130. return true
  131. end
  132. end
  133. function tryConnectMiddle(ip, port)
  134. print("try connect middle ", ip, port)
  135. Log.write(Log.LOGID_INNER_CLOSE, "tryConnectMiddle", ip, port)
  136. msg_parse.set_connect(ip, port)
  137. end
  138. function stopConnectMiddle()
  139. print("stop connect middle ")
  140. Log.write(Log.LOGID_INNER_CLOSE, "stopConnectMiddle")
  141. msg_parse.close_connect()
  142. IS_MIDDLE_CONNECT = nil
  143. MiddleHeartBeat.LAST_HEARTBEAT_TIME = nil
  144. MiddleHeartBeat.LAST_SEND_HB_TS = nil
  145. end
  146. function LW_HELLO(fd, msg)
  147. print("LW Hello fd = "..fd)
  148. --table.print_lua_table(msg)
  149. --local stackTrace = debug.traceback("", 2)
  150. --print("[LW_HELLO] 堆栈信息 "..stackTrace)
  151. -- Log.write(Log.LOGID_INNER_CLOSE, "LW_HELLO")
  152. Log.write(Log.LOGID_INNER_CLOSE, string.format("LW_HELLO, client: %s, fd: %s", msg.svrIndex, fd))
  153. MiddleManager.addLogicServer(fd, msg.svrIndex)
  154. local szMsgData = InnerMsg.wl.WL_HELLO
  155. --table.print_lua_table(szMsgData)
  156. szMsgData.nGetSvrID = msg.svrIndex
  157. szMsgData.nNowSvrID = Config.SVR_INDEX
  158. --table.print_lua_table(msg)
  159. --table.print_lua_table(szMsgData)
  160. InnerMsg.sendMsg(fd, szMsgData)
  161. msg = InnerMsg.wl.WL_HEARTBEAT
  162. InnerMsg.sendMsg(fd, msg)
  163. -- 同步其它信息
  164. -- JjcLadderMiddle.sendWLMobaiCnt(fd)
  165. end
  166. function WL_HELLO(fd, msg)
  167. print("WL hello fd = "..fd)
  168. Log.write(Log.LOGID_INNER_CLOSE, "WL_HELLO")
  169. if not IS_MIDDLE_CONNECT then
  170. print("middle server upup!!!---")
  171. IS_MIDDLE_CONNECT = true
  172. local openTime = CommonDB.getServerOpenTime()
  173. if openTime ~= 0 then
  174. -- local msg = InnerMsg.lw.LW_SET
  175. -- msg.openTime = openTime or 0
  176. -- msg.svrIndex = Config.SVR_INDEX
  177. -- InnerMsg.sendMsg(fd, msg)
  178. end
  179. BanLogic.NS_Get_BanData()
  180. end
  181. end
  182. function LW_SET(fd,msg)
  183. MiddleManager.setServerOpenDay(fd,msg.svrIndex,msg.openTime)
  184. end
  185. function LW_DISCONNECT(fd, msg)
  186. print("LW_DISCONNECT")
  187. MiddleManager.delLogicServer(fd)
  188. end
  189. --middle断线,C++层触发
  190. function WL_DISCONNECT(fd, msg)
  191. if IS_MIDDLE_CONNECT then
  192. IS_MIDDLE_CONNECT = nil
  193. MiddleHeartBeat.LAST_HEARTBEAT_TIME = nil
  194. MiddleHeartBeat.LAST_SEND_HB_TS = nil
  195. Log.write(Log.LOGID_INNER_CLOSE, "middle server disconnect!!!")
  196. print("middle server disconnect!!!---")
  197. end
  198. end
  199. -- 跨服聊天请求
  200. function LW_MIDDLE_CHAT(fd, msg)
  201. local tAllConnectFD = MiddleManager.MiddleManager_GetAllFD()
  202. if not _G.next(tAllConnectFD) then
  203. print("[LW_MIDDLE_CHAT] 不存在连接上的服务器")
  204. return
  205. end
  206. local szMsgData = InnerMsg.wl.WL_MIDDLE_CHAT
  207. szMsgData.tChatMsg = msg.tChatMsg
  208. local nMsgType = szMsgData.tChatMsg.item.msgType
  209. if ChatHandler.CHAT_TYPE_MIDDLE == nMsgType then
  210. for _, nFD in pairs(tAllConnectFD) do
  211. InnerMsg.sendMsg(nFD, szMsgData)
  212. end
  213. print("[LW_MIDDLE_CHAT] 全服发送消息结束")
  214. elseif ChatHandler.CHAT_TYPE_WARZONE == nMsgType then
  215. local nSendServerID = msg.svrIndex
  216. local nConfServerID = nSendServerID - nServerOffSet + 1
  217. local nMinServerID, nMaxServerID = MiddleConnect_GetWarZoneServer(nConfServerID)
  218. if 0 >= nMinServerID or 0 >= nMaxServerID then
  219. print("[LW_MIDDLE_CHAT 获取不到配置 nSendServerID = "..nSendServerID.." nConfServerID = "..nConfServerID)
  220. return
  221. end
  222. local nServeL, nServerR = nMinServerID + nServerOffSet - 1, nMaxServerID + nServerOffSet - 1
  223. for i = nServeL, nServerR, 1 do
  224. local nFD = MiddleManager.getFDBySvrIndex(i)
  225. if nFD then
  226. InnerMsg.sendMsg(nFD, szMsgData)
  227. else
  228. print("[LW_MIDDLE_CHAT] 不存在对应的fd i = "..i)
  229. end
  230. end
  231. -- print("[LW_MIDDLE_CHAT] 战区发送消息结束")
  232. else
  233. print("[LW_MIDDLE_CHAT] 未处理的发送消息结束")
  234. end
  235. end
  236. -- 获取聊天英雄信息
  237. function LW_MIDDLE_CHAT_QUERY_HERO_DATA(fd, msg)
  238. local nDesServerID = msg.nDesServerID
  239. local nDesFD = MiddleManager.getFDBySvrIndex(nDesServerID)
  240. if not nDesFD then
  241. print("[LW_MIDDLE_CHAT_QUERY_HERO_DATA] 不存在对应的fd nDesServerID = "..nDesServerID)
  242. return
  243. end
  244. print("[LW_MIDDLE_CHAT_QUERY_HERO_DATA] nDesServerID = "..nDesServerID.." nDesFD = "..nDesFD)
  245. local szMsgData = InnerMsg.wl.WL_MIDDLE_CHAT_QUERY_HERO_DATA
  246. szMsgData.nSrcServerID = msg.nSrcServerID
  247. szMsgData.nSrcUID = msg.nSrcUID
  248. szMsgData.nDesUID = msg.nDesUID
  249. szMsgData.nHeroIndex = msg.nHeroIndex
  250. szMsgData.nChatType = msg.nChatType
  251. InnerMsg.sendMsg(nDesFD, szMsgData)
  252. end
  253. function LW_MIDDLE_CHAT_GET_HERO_DATA(fd, msg)
  254. local nSrcServerID = msg.nSrcServerID
  255. local nSrcFD = MiddleManager.getFDBySvrIndex(nSrcServerID)
  256. if not nSrcFD then
  257. print("[LW_MIDDLE_CHAT_GET_HERO_DATA] 不存在对应的fd nSrcServerID = "..nSrcServerID)
  258. return
  259. end
  260. print("[LW_MIDDLE_CHAT_GET_HERO_DATA] nSrcServerID = "..nSrcServerID.." nSrcFD = "..nSrcFD)
  261. local szMsgData = InnerMsg.wl.WL_MIDDLE_CHAT_GET_HERO_DATA
  262. szMsgData.nSrcUID = msg.nSrcUID
  263. szMsgData.tHeroData = msg.tHeroData
  264. InnerMsg.sendMsg(nSrcFD, szMsgData)
  265. end
  266. function LW_WARREPORT_GET_COMBATINFO(fd, msg)
  267. local nDesServerID = msg.nDesServerID
  268. local nDesFD = MiddleManager.getFDBySvrIndex(nDesServerID)
  269. --local nSrcFD = MiddleManager.getFDBySvrIndex(msg.nSrcServerID)
  270. if not nDesFD then
  271. print("[LW_WARREPORT_GET_COMBATINFO] 不存在对应的fd nDesServerID = "..nDesServerID.." nSrcServerID = "..msg.nSrcServerID)
  272. return
  273. end
  274. local tMsgData = InnerMsg.wl.WL_WARREPORT_GET_COMBATINFO
  275. tMsgData.nSrcUID = msg.nSrcUID
  276. tMsgData.type = msg.type
  277. tMsgData.id = msg.id
  278. tMsgData.nSrcServerID = msg.nSrcServerID
  279. tMsgData.mode = msg.mode
  280. InnerMsg.sendMsg(nDesFD, tMsgData)
  281. end
  282. function LW_WARREPORT_SEND_COMBATINFO(fd, msg)
  283. local nSrcServerID = msg.nSrcServerID
  284. local nSrcFD = MiddleManager.getFDBySvrIndex(nSrcServerID)
  285. if not nSrcFD then
  286. print("[LW_MIDDLE_CHAT_GET_HERO_DATA] 不存在对应的fd nSrcServerID = "..nSrcServerID)
  287. return
  288. end
  289. local tMsgData = InnerMsg.wl.WL_WARREPORT_SEND_COMBATINFO
  290. tMsgData.nSrcUID = msg.nSrcUID
  291. tMsgData.combatInfo = msg.combatInfo
  292. tMsgData.mode = msg.mode
  293. InnerMsg.sendMsg(nSrcFD, tMsgData)
  294. end
  295. -------------------- 跨服玩家头像数据开始 --------------------
  296. function LW_CHAT_PLAYER_INFO(fd, msg)
  297. local nDesFD = MiddleManager.getFDBySvrIndex(msg.nDesServerID)
  298. if not nDesFD then
  299. print("[LW_CHAT_PLAYER_INFO] 不存在对应的fd nDesServerID = "..msg.nDesServerID.." nSrcServerID = "..msg.nSrcServerID)
  300. return
  301. end
  302. local tMsgData = InnerMsg.wl.WL_CHAT_PLAYER_INFO
  303. tMsgData.nSrcUID = msg.nSrcUID
  304. tMsgData.nDesUID = msg.nDesUID
  305. tMsgData.nSrcServerID = msg.nSrcServerID
  306. tMsgData.nFrom = msg.nFrom
  307. tMsgData.nType = msg.nType
  308. InnerMsg.sendMsg(nDesFD, tMsgData)
  309. end
  310. function LW_CHAT_PLAYER_INFO_SEND(fd, msg)
  311. local nSrcFD = MiddleManager.getFDBySvrIndex(msg.nSrcServerID)
  312. if not nSrcFD then
  313. print("[LW_CHAT_PLAYER_INFO_SEND] 不存在对应的fd nSrcServerID = "..msg.nSrcServerID)
  314. return
  315. end
  316. local tMsgData = InnerMsg.wl.WL_CHAT_PLAYER_INFO_SEND
  317. tMsgData.nSrcUID = msg.nSrcUID
  318. tMsgData.tData = msg.tData
  319. tMsgData.nFrom = msg.nFrom
  320. tMsgData.nType = msg.nType
  321. InnerMsg.sendMsg(nSrcFD, tMsgData)
  322. end
  323. -------------------- 跨服玩家头像数据结束 --------------------
  324. -------------------- 跨服请求战斗数据开始 --------------------
  325. function LW_COMBAT_GETINFO(fd, msg)
  326. local nDesFD = MiddleManager.getFDBySvrIndex(msg.nDesServerID)
  327. if not nDesFD then
  328. print("[LW_COMBAT_QIECUO_GETINFO] 不存在对应的fd nDesServerID = "..msg.nDesServerID.." nSrcServerID = "..msg.nSrcServerID)
  329. return
  330. end
  331. print("[LW_COMBAT_GETINFO] 收到")
  332. local tMsgData = InnerMsg.wl.WL_COMBAT_GETINFO
  333. tMsgData.nSrcUID = msg.nSrcUID
  334. tMsgData.nDesUID = msg.nDesUID
  335. tMsgData.nSrcServerID = msg.nSrcServerID
  336. tMsgData.nCombatType = msg.nCombatType
  337. tMsgData.extraArgs = msg.extraArgs or {}
  338. InnerMsg.sendMsg(nDesFD, tMsgData)
  339. print("[LW_COMBAT_GETINFO] 发送 WL_COMBAT_QIECUO_GETINFO")
  340. end
  341. function LW_COMBAT_GETINFO_SEND(fd, msg)
  342. local nSrcFD = MiddleManager.getFDBySvrIndex(msg.nSrcServerID)
  343. if not nSrcFD then
  344. print("[LW_COMBAT_GETINFO_SEND] 不存在对应的fd nSrcServerID = "..msg.nSrcServerID)
  345. return
  346. end
  347. print("[LW_COMBAT_GETINFO_SEND] 收到")
  348. local tMsgData = InnerMsg.wl.WL_COMBAT_GETINFO_SEND
  349. tMsgData.nResult = msg.nResult
  350. tMsgData.nSrcUID = msg.nSrcUID
  351. tMsgData.tObjList = msg.tObjList
  352. tMsgData.tHelpList = msg.tHelpList
  353. tMsgData.tRoleBase = msg.tRoleBase
  354. tMsgData.formation = msg.formation
  355. tMsgData.tJiBan = msg.tJiBan
  356. tMsgData.tElfList = msg.tElfList
  357. InnerMsg.sendMsg(nSrcFD, tMsgData)
  358. print("[LW_COMBAT_GETINFO_SEND] 发送 WL_COMBAT_GETINFO_SEND")
  359. end
  360. -------------------- 跨服请求战斗数据结束 --------------------
  361. -------------------- 天梯赛开始 ---------------------------
  362. -- 请求参加天梯赛(普通->中心)
  363. function LW_JJC_NEWLADDER_JOINLADDER_O2C(fd, msg)
  364. local nSrcServerID = msg.nSrcServerID
  365. local nWarFD = MiddleConnect_GetWarFirstServerFD(nSrcServerID)
  366. if not nWarFD then
  367. print("[LW_JJC_NEWLADDER_JOINLADDER_O2C] 获取不到对应的战区的FD nSrcServerID = "..nSrcServerID)
  368. return
  369. end
  370. print("[LW_JJC_NEWLADDER_JOINLADDER_O2C] 玩家请求参加天梯赛")
  371. local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_JOINLADDER_C2D
  372. tMsgData.uuid = msg.uuid
  373. tMsgData.name = msg.name
  374. tMsgData.head = msg.head
  375. tMsgData.headFrame = msg.headFrame
  376. tMsgData.nSrcServerID = msg.nSrcServerID
  377. tMsgData.szServerName = msg.szServerName
  378. tMsgData.zhandouli = msg.zhandouli
  379. InnerMsg.sendMsg(nWarFD, tMsgData)
  380. print("[LW_JJC_NEWLADDER_JOINLADDER_O2C] 玩家请求参加天梯赛, 发送到对应的战区数据服成功")
  381. end
  382. -- 请求参加天梯赛(数据->中心)
  383. function LW_JJC_NEWLADDER_JOINLADDER_D2C(fd, msg)
  384. local nFd = MiddleManager.getFDBySvrIndex(msg.nSrcServerID)
  385. if not nFd then
  386. print("[LW_JJC_NEWLADDER_JOINLADDER_D2C] 获取不到对应的天梯赛回复的服务器FD nSrcServerID = "..msg.nSrcServerID)
  387. return
  388. end
  389. local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_JOINLADDER_C2O
  390. tMsgData.uuid = msg.uuid
  391. tMsgData.nRank = msg.nRank
  392. tMsgData.tEnemy = msg.tEnemy
  393. tMsgData.nPoint = msg.nPoint
  394. InnerMsg.sendMsg(nFd, tMsgData)
  395. print("[LW_JJC_NEWLADDER_JOINLADDER_D2C] 请求参加天梯赛(数据->中心) 回复结束")
  396. end
  397. -- 请求刷新对战列表(普通->中心)
  398. function LW_JJC_NEWLADDER_REFRESH_O2C(msg)
  399. local nSrcServerID = msg.nSrcServerID
  400. local nWarFD = MiddleConnect_GetWarFirstServerFD(nSrcServerID)
  401. if not nWarFD then
  402. print("[LW_JJC_NEWLADDER_REFRESH_O2C] 获取不到对应的战区的FD nSrcServerID = "..nSrcServerID)
  403. return
  404. end
  405. print("[LW_JJC_NEWLADDER_REFRESH_O2C] 玩家请求刷新对战列表")
  406. local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_REFRESH_C2D
  407. tMsgData.uuid = msg.uuid
  408. tMsgData.nSrcServerID = msg.nSrcServerID
  409. InnerMsg.sendMsg(nWarFD, tMsgData)
  410. print("[LW_JJC_NEWLADDER_REFRESH_O2C] 玩家请求刷新对战列表, 发送到对应的战区数据服成功")
  411. end
  412. -- 请求刷新对战列表(数据->中心)
  413. function LW_JJC_NEWLADDER_REFRESH_D2C(msg)
  414. local nFd = MiddleManager.getFDBySvrIndex(msg.nSrcServerID)
  415. if not nFd then
  416. print("[LW_JJC_NEWLADDER_REFRESH_D2C] 获取不到对应的天梯赛回复的服务器FD nSrcServerID = "..msg.nSrcServerID)
  417. return
  418. end
  419. local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_REFRESH_C2O
  420. tMsgData.uuid = msg.uuid
  421. tMsgData.tEnemy = msg.tEnemy
  422. InnerMsg.sendMsg(nFd, tMsgData)
  423. print("[LW_JJC_NEWLADDER_REFRESH_D2C] 请求刷新对战列表(数据->中心) 发送完成")
  424. end
  425. -- 请求上一轮排名前三数据(普通->中心)
  426. function LW_JJC_NEWLADDER_LAST3RANK_O2C(msg)
  427. local nWarFD = MiddleConnect_GetWarFirstServerFD(msg.nSrcServerID)
  428. if not nWarFD then
  429. print("[LW_JJC_NEWLADDER_LAST3RANK_O2C] 获取不到对应的战区的FD nSrcServerID = "..msg.nSrcServerID)
  430. return
  431. end
  432. print("[LW_JJC_NEWLADDER_LAST3RANK_O2C] 开始先数据服发送请求上一轮前三")
  433. local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_LAST3RANK_C2D
  434. tMsgData.nSrcServerID = msg.nSrcServerID
  435. InnerMsg.sendMsg(nWarFD, tMsgData)
  436. end
  437. -- 请求上一轮排名前三数据(数据->中心)
  438. function LW_JJC_NEWLADDER_LAST3RANK_D2O(msg)
  439. local nFd = MiddleManager.getFDBySvrIndex(msg.nSrcServerID)
  440. if not nFd then
  441. print("[LW_JJC_NEWLADDER_LAST3RANK_D2O] 获取不到对应的天梯赛回复的服务器FD nSrcServerID = "..msg.nSrcServerID)
  442. return
  443. end
  444. print("[LW_JJC_NEWLADDER_LAST3RANK_D2O] 获取到对应的 上一轮排名前三数据")
  445. local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_LAST3RANK_C2O
  446. tMsgData.nExist = msg.nExist
  447. tMsgData.tLastRankInfo = msg.tLastRankInfo
  448. InnerMsg.sendMsg(nFd, tMsgData)
  449. end
  450. -- 进行点赞(普通->中心)
  451. function LW_JJC_NEWLADDER_SEND_WORSHIP_O2C(msg)
  452. local nDesServerID = msg.nDesServerID
  453. local nDesFD = MiddleManager.getFDBySvrIndex(nDesServerID)
  454. if not nDesFD then
  455. print("[LW_JJC_NEWLADDER_SEND_WORSHIP_O2C] 获取不到需要传递的服务器FD nSrcServerID = "..msg.nSrcServerID.." nDesServerID = "..nDesServerID)
  456. return
  457. end
  458. local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_SEND_WORSHIP_C2D
  459. tMsgData.uuidSrc = msg.uuidSrc
  460. tMsgData.uuidDes = msg.uuidDes
  461. tMsgData.nSrcServerID = msg.nSrcServerID
  462. InnerMsg.sendMsg(nDesFD, tMsgData)
  463. end
  464. -- 进行点赞(数据(被点赞玩家所在服)->中心)
  465. function LW_JJC_NEWLADDER_SEND_WORSHIP_D2C(msg)
  466. local nSrcFD = MiddleManager.getFDBySvrIndex(msg.nSrcServerID)
  467. if not nSrcFD then
  468. print("[LW_JJC_NEWLADDER_SEND_WORSHIP_D2C] 获取不到回复的服务器FD nSrcServerID = "..msg.nSrcServerID)
  469. return
  470. end
  471. local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_SEND_WORSHIP_C2O
  472. tMsgData.uuidSrc = msg.uuidSrc
  473. tMsgData.uuidDes = msg.uuidDes
  474. tMsgData.nNowWorShip = msg.nNowWorShip
  475. -- 回复对应的服务器
  476. InnerMsg.sendMsg(nSrcFD, tMsgData)
  477. -- 发给战区数据服,更新点赞数
  478. local nWarFD = MiddleConnect_GetWarFirstServerFD(msg.nSrcServerID)
  479. if nWarFD then
  480. tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_WORSHIP_CHANGE_C2D
  481. tMsgData.uuidDes = msg.uuidDes
  482. tMsgData.nAddNum = 1
  483. InnerMsg.sendMsg(nWarFD, tMsgData)
  484. else
  485. print("[LW_JJC_NEWLADDER_SEND_WORSHIP_D2C] 不存在对应的战区fd")
  486. end
  487. end
  488. -- 通知战区下属服务器最新的点赞数
  489. function LW_JJC_NEWLADDER_WORSHIP_CHANGE_D2C(msg)
  490. local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_WORSHIP_UPDATE_D2C
  491. tMsgData.uuidDes = msg.uuidDes
  492. tMsgData.nNowWorShip = msg.nNowWorShip
  493. local nConfigServerID = MiddleConnect_TrueServerID2ConfServerID(msg.nSrcServerID)
  494. local nMinServerID, nMaxServerID = MiddleConnect_GetWarZoneServer(nConfigServerID)
  495. for i = nMinServerID, nMaxServerID, 1 do
  496. local nTrueServerID = MiddleConnect_ConfServerID2TrueServerID(i)
  497. local nFD = MiddleManager.getFDBySvrIndex(nTrueServerID)
  498. if nFD then
  499. InnerMsg.sendMsg(nFD, tMsgData)
  500. else
  501. print("[LW_JJC_NEWLADDER_WORSHIP_CHANGE_D2C] 没有获取到对应的 nTrueServerID = "..nTrueServerID)
  502. end
  503. end
  504. end
  505. -- 请求天梯赛排行榜数据(普通->中心)
  506. function LW_JJC_NEWLADDER_QUERY_RANK_O2C(msg)
  507. local nWarFD = MiddleConnect_GetWarFirstServerFD(msg.nSrcServerID)
  508. if not nWarFD then
  509. print("[LW_JJC_NEWLADDER_QUERY_RANK_O2C] 获取不到对应的战区的FD")
  510. return
  511. end
  512. local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_QUERY_RANK_C2D
  513. tMsgData.nSrcServerID = msg.nSrcServerID
  514. InnerMsg.sendMsg(nWarFD, tMsgData)
  515. end
  516. -- 回复天梯赛排行榜数据(中心->数据服)
  517. function LW_JJC_NEWLADDER_QUERY_RANK_D2C(msg)
  518. local nFD = MiddleManager.getFDBySvrIndex(msg.nSrcServerID)
  519. if not nFD then
  520. print("[LW_JJC_NEWLADDER_QUERY_RANK_D2C] 找不到请求服务器对应的FD nSrcServerID = "..msg.nSrcServerID)
  521. return
  522. end
  523. local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_QUERY_RANK_C2O
  524. tMsgData.nIsEnd = msg.nIsEnd
  525. tMsgData.nFirst = msg.nFirst
  526. tMsgData.tRankInfo = msg.tRankInfo
  527. InnerMsg.sendMsg(nFD, tMsgData)
  528. end
  529. -- 查询是否能够战斗(普通->中心)
  530. function LW_JJC_NEWLADDER_QUERY_CAN_FIGHT_O2C(msg)
  531. local nWarFD = MiddleConnect_GetWarFirstServerFD(msg.nSrcServerID)
  532. if not nWarFD then
  533. print("[LW_JJC_NEWLADDER_QUERY_CAN_FIGHT_O2C] 获取不到对应的战区的FD")
  534. return
  535. end
  536. local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_QUERY_CAN_FIGHT_C2D
  537. tMsgData.uuid = msg.uuid
  538. tMsgData.uuidDes = msg.uuidDes
  539. tMsgData.nSrcServerID = msg.nSrcServerID
  540. InnerMsg.sendMsg(nWarFD, tMsgData)
  541. print("[LW_JJC_NEWLADDER_QUERY_CAN_FIGHT_O2C] 查询是否能够战斗(普通->中心)")
  542. end
  543. -- 查询是否能够战斗(数据服->中心)
  544. function LW_JJC_NEWLADDER_QUERY_CAN_FIGHT_D2C(msg)
  545. local nFD = MiddleManager.getFDBySvrIndex(msg.nSrcServerID)
  546. if not nFD then
  547. print("[LW_JJC_NEWLADDER_QUERY_CAN_FIGHT_D2C] 找不到请求服务器对应的FD nSrcServerID = "..msg.nSrcServerID)
  548. return
  549. end
  550. local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_QUERY_CAN_FIGHT_C2O
  551. tMsgData.uuid = msg.uuid
  552. tMsgData.uuidDes = msg.uuidDes
  553. tMsgData.nIsFight = msg.nIsFight
  554. InnerMsg.sendMsg(nFD, tMsgData)
  555. end
  556. -- 战斗结束(普通->中心)
  557. function LW_JJC_NEWLADDER_CANCEL_FIGHT_END_O2C(msg)
  558. local nWarFD = MiddleConnect_GetWarFirstServerFD(msg.nSrcServerID)
  559. if not nWarFD then
  560. print("[LW_JJC_NEWLADDER_CANCEL_FIGHT_END_O2C] 获取不到对应的战区的FD")
  561. return
  562. end
  563. local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_CANCEL_FIGHT_END_C2D
  564. tMsgData.uuid = msg.uuid
  565. tMsgData.uuidDes = msg.uuidDes
  566. tMsgData.nSrcServerID = msg.nSrcServerID
  567. tMsgData.nResult = msg.nResult
  568. tMsgData.tEnemyUid = msg.tEnemyUid
  569. tMsgData.nZhanDouLi = msg.nZhanDouLi
  570. InnerMsg.sendMsg(nWarFD, tMsgData)
  571. end
  572. -- 战斗结束(数据服->中心)
  573. function LW_JJC_NEWLADDER_CANCEL_FIGHT_END_D2C(msg)
  574. local nFD = MiddleManager.getFDBySvrIndex(msg.nSrcServerID)
  575. if not nFD then
  576. print("[LW_JJC_NEWLADDER_CANCEL_FIGHT_END_D2C] 找不到请求服务器对应的FD nSrcServerID = "..msg.nSrcServerID)
  577. return
  578. end
  579. local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_CANCEL_FIGHT_END_C2O
  580. tMsgData.uuid = msg.uuid
  581. tMsgData.nNewRank = msg.nNewRank
  582. tMsgData.nNewPoint = msg.nNewPoint
  583. tMsgData.uuidDes = msg.uuidDes
  584. tMsgData.tNewOneEnemy = msg.tNewOneEnemy
  585. tMsgData.tOldEnemyData = msg.tOldEnemyData
  586. InnerMsg.sendMsg(nFD, tMsgData)
  587. end
  588. --发送失败邮件
  589. function LW_JJC_NEWLADDER_SEND_MAIL_D2C(msg)
  590. local nFD = MiddleManager.getFDBySvrIndex(msg.nDesServerID)
  591. if not nFD then
  592. print("[LW_JJC_NEWLADDER_SEND_MAIL_D2C] 找不到请求服务器对应的FD nDesServerID = "..msg.nDesServerID)
  593. return
  594. end
  595. local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_SEND_MAIL_C2O
  596. tMsgData.uuidDes = msg.uuidDes
  597. tMsgData.szServerName = msg.szServerName
  598. tMsgData.szName = msg.szName
  599. tMsgData.nNewRank = msg.nNewRank
  600. InnerMsg.sendMsg(nFD, tMsgData)
  601. end
  602. function LW_JJC_NEWLADDER_SEND_RANK_PRIZE_D2C(msg)
  603. local nFD = MiddleManager.getFDBySvrIndex(msg.nServerID)
  604. if not nFD then
  605. print("[LW_JJC_NEWLADDER_SEND_RANK_PRIZE_D2C] 找不到请求服务器对应的FD nServerID = "..msg.nServerID)
  606. return
  607. end
  608. local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_SEND_RANK_PRIZE_C2O
  609. tMsgData.uuid = msg.uuid
  610. tMsgData.nRank = msg.nRank
  611. InnerMsg.sendMsg(nFD, tMsgData)
  612. print("[LW_JJC_NEWLADDER_SEND_RANK_PRIZE_D2C] 发送对应玩家的奖励邮件")
  613. end
  614. function LW_JJC_NEWLADDER_QUERY_WORSHIP_D2C(msg)
  615. local nFD = MiddleManager.getFDBySvrIndex(msg.nServerID)
  616. if not nFD then
  617. print("[LW_JJC_NEWLADDER_QUERY_WORSHIP_D2C] 找不到请求服务器对应的FD nServerID = "..msg.nServerID)
  618. return
  619. end
  620. local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_QUERY_WORSHIP_C20
  621. tMsgData.uuid = msg.uuid
  622. tMsgData.nFromServerID = msg.nFromServerID
  623. InnerMsg.sendMsg(nFD, tMsgData)
  624. end
  625. function LW_JJC_NEWLADDER_QUERY_WORSHIP_O2C(msg)
  626. local nFD = MiddleManager.getFDBySvrIndex(msg.nFromServerID)
  627. if not nFD then
  628. print("[LW_JJC_NEWLADDER_QUERY_WORSHIP_O2C] 找不到请求服务器对应的FD nServerID = "..msg.nFromServerID)
  629. return
  630. end
  631. local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_QUERY_WORSHIP_C2D
  632. tMsgData.uuid = msg.uuid
  633. tMsgData.nWorShip = msg.nWorShip
  634. InnerMsg.sendMsg(nFD, tMsgData)
  635. end
  636. -------------------- 天梯赛结束 ---------------------------