UIChangeServerCtr.lua 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. local UIChangeServerCtr = class("UIChangeServerCtr", require("UICtrBase"))
  2. local DefaultOnePageNum = 10
  3. function UIChangeServerCtr:Init(view)
  4. self.view = view
  5. end
  6. ---@param data boolean 是否直接重登
  7. function UIChangeServerCtr:SetData(data)
  8. self.asyncIdx = 0
  9. if data == nil then return end
  10. self.data = data
  11. end
  12. function UIChangeServerCtr:GetAsyncIdx()
  13. self.asyncIdx = self.asyncIdx + 1
  14. return self.asyncIdx
  15. end
  16. function UIChangeServerCtr:GetData()
  17. return self.data
  18. end
  19. function UIChangeServerCtr:OnDispose()
  20. self.validNewInterval = nil
  21. self.curPageType = nil
  22. self.curSelectGroupIdx = nil
  23. self.serverDataMap = nil
  24. self.serverLastReqMap = nil
  25. self.data = nil
  26. self.view = nil
  27. end
  28. function UIChangeServerCtr:InitData()
  29. -- if self.data then
  30. -- for _, value in pairs(Enum.ChangeServerPageType) do
  31. -- if value == self.data then
  32. -- self.curPageType = value
  33. -- break
  34. -- end
  35. -- end
  36. -- end
  37. self.validNewInterval = GlobalConfig.Instance:GetConfigIntValue(303)
  38. self.curPageType = Enum.ChangeServerPageType.Recommend
  39. self.curSelectGroupIdx = nil
  40. end
  41. function UIChangeServerCtr:IsOnlyChangeServer()
  42. return self.data
  43. end
  44. function UIChangeServerCtr:GetCurPageType()
  45. return self.curPageType
  46. end
  47. function UIChangeServerCtr:SetCurPageType(pageType)
  48. if self.curPageType == pageType then
  49. return false
  50. end
  51. self.curPageType = pageType
  52. self.curSelectGroupIdx = nil
  53. return true
  54. end
  55. function UIChangeServerCtr:CheckCacheData()
  56. if self.serverDataMap then
  57. local serverInfo = self.serverDataMap[self.curPageType]
  58. if serverInfo then
  59. if self.curPageType == Enum.ChangeServerPageType.Recommend then
  60. if serverInfo.valid then
  61. if serverInfo.lastUpdteTime then
  62. if (Time.realtimeSinceStartup - serverInfo.lastUpdteTime) <= 5 then
  63. return false
  64. end
  65. end
  66. serverInfo.valid = false
  67. end
  68. elseif self.curPageType == Enum.ChangeServerPageType.All then
  69. if self.curSelectGroupIdx then
  70. serverInfo = serverInfo[self.curSelectGroupIdx]
  71. if serverInfo then
  72. if serverInfo.valid then
  73. if serverInfo.lastUpdteTime then
  74. if (Time.realtimeSinceStartup - serverInfo.lastUpdteTime) <= 5 then
  75. return false
  76. end
  77. end
  78. serverInfo.valid = false
  79. end
  80. end
  81. end
  82. end
  83. end
  84. end
  85. return true
  86. end
  87. function UIChangeServerCtr:IsCurServer(serverId)
  88. return ManagerContainer.LuaGameMgr.serverData.id == serverId
  89. end
  90. function UIChangeServerCtr:UpdateServerData(serverJson, pageType, pageId)
  91. if not pageType then
  92. return false
  93. end
  94. if serverJson then
  95. if not self.serverDataMap then
  96. self.serverDataMap = {}
  97. end
  98. if pageType == Enum.ChangeServerPageType.Recommend then
  99. local serverInfo = self.serverDataMap[pageType]
  100. if not serverInfo then
  101. serverInfo = {}
  102. self.serverDataMap[pageType] = serverInfo
  103. end
  104. local ServerList = serverJson
  105. serverInfo.ServerList = ServerList
  106. local ServerMap = serverInfo.ServerMap
  107. if not ServerMap then
  108. ServerMap = {}
  109. serverInfo.ServerMap = ServerMap
  110. end
  111. serverInfo.lastUpdteTime = Time.realtimeSinceStartup
  112. serverInfo.valid = true
  113. local serverData = ManagerContainer.LuaGameMgr.serverData
  114. local serverId = serverData.id
  115. local serverIp = serverData.ip
  116. local hasSelfServer = false
  117. for _, value in pairs(ServerList) do
  118. if value.ServerId then
  119. ServerMap[value.ServerId] = value
  120. if value.ServerId == serverId then
  121. hasSelfServer = true
  122. if value.Ip ~= serverIp then
  123. LogError('Recommend Server and Current Server is not match !!!')
  124. LogError('recommend server : ' .. Inspect(value))
  125. LogError('current server : id : ' .. tostring(serverId) .. ' ip : ' .. tostring(serverIp))
  126. end
  127. end
  128. end
  129. end
  130. if not hasSelfServer then
  131. if serverId and serverId > 0 then
  132. local userData = ManagerContainer.DataMgr.UserData
  133. if userData and userData:IsInitedOver() then
  134. local curServerData = {
  135. ServerId = serverId,
  136. ServerName = serverData.name,
  137. HeadFrameId = userData:GetHeadFrameId(),
  138. Level = userData:GetRoleLv(),
  139. Gender = userData:GetSex(),
  140. NickName = userData:GetUserNickname(),
  141. RecordTime = ManagerContainer.LuaTimerMgr:GetTimeSecond(),
  142. JobCfgId = userData:GetHeroJobCfgId(),
  143. Ip = serverIp,
  144. Port = serverData.ports,
  145. State = serverData.state,
  146. New = false,
  147. STime = os.date('%Y-%m-%d %H:%M:%S', os.time())
  148. }
  149. ServerMap[serverId] = curServerData
  150. ServerList[#ServerList + 1] = curServerData
  151. end
  152. end
  153. end
  154. table.sort(ServerList, function(a, b)
  155. if a.ServerId == serverId then
  156. return true
  157. end
  158. if b.ServerId == serverId then
  159. return false
  160. end
  161. local hasRoleA = (a.Gender and a.Gender > 0 and a.JobCfgId and a.JobCfgId > 0 and a.Level and a.Level > 0)
  162. local hasRoleB = (b.Gender and b.Gender > 0 and b.JobCfgId and b.JobCfgId > 0 and b.Level and b.Level > 0)
  163. if hasRoleA == hasRoleB then
  164. if a.New == b.New then
  165. return a.ServerId > b.ServerId
  166. else
  167. return (not a.New)
  168. end
  169. else
  170. return hasRoleA
  171. end
  172. end)
  173. elseif pageType == Enum.ChangeServerPageType.All then
  174. local serverInfos = self.serverDataMap[pageType]
  175. if not serverInfos then
  176. serverInfos = {}
  177. serverInfos.OnePageNum = DefaultOnePageNum
  178. self.serverDataMap[pageType] = serverInfos
  179. end
  180. if serverJson.Page and serverJson.Page > 0 and serverInfos.OnePageNum ~= serverJson.Page then
  181. serverInfos.OnePageNum = serverJson.Page
  182. if serverInfos.ServerNum then
  183. serverInfos.ServerGroupNum = Mathf.Ceil(serverInfos.ServerNum / serverInfos.OnePageNum) + 1
  184. end
  185. end
  186. if serverJson.MaxServerId and serverJson.MaxServerId > 0 and serverInfos.ServerNum ~= serverJson.MaxServerId then
  187. serverInfos.ServerNum = serverJson.MaxServerId
  188. if serverInfos.OnePageNum then
  189. serverInfos.ServerGroupNum = Mathf.Ceil(serverInfos.ServerNum / serverInfos.OnePageNum) + 1
  190. else
  191. serverInfos.ServerGroupNum = Mathf.Ceil(serverInfos.ServerNum / DefaultOnePageNum) + 1
  192. end
  193. end
  194. local serverGroupNum = 0
  195. if serverInfos.ServerGroupNum then
  196. serverGroupNum = serverInfos.ServerGroupNum
  197. end
  198. if not pageId or pageId <= 0 then
  199. pageId = 1
  200. else
  201. pageId = serverGroupNum - pageId
  202. end
  203. if not self.curSelectGroupIdx then
  204. self.curSelectGroupIdx = pageId
  205. end
  206. if serverJson.ServerList then
  207. table.sort(serverJson.ServerList, function(a, b)
  208. return a.ServerId > b.ServerId
  209. end)
  210. local serverInfo = serverInfos[pageId]
  211. if not serverInfo then
  212. serverInfo = {}
  213. serverInfos[pageId] = serverInfo
  214. end
  215. serverInfo.ServerList = serverJson.ServerList
  216. serverInfo.lastUpdteTime = Time.realtimeSinceStartup
  217. serverInfo.valid = true
  218. end
  219. end
  220. end
  221. end
  222. function UIChangeServerCtr:GetCurSelectServerGroupIdx()
  223. if self.curSelectGroupIdx then
  224. if self.serverDataMap then
  225. local serverInfos = self.serverDataMap[self.curPageType]
  226. if serverInfos then
  227. if serverInfos.ServerGroupNum then
  228. return serverInfos.ServerGroupNum - self.curSelectGroupIdx
  229. end
  230. end
  231. end
  232. end
  233. return nil
  234. end
  235. function UIChangeServerCtr:SetCurSelectGroupIdx(groupIdx)
  236. if self.curSelectGroupIdx == groupIdx then
  237. return false
  238. end
  239. self.curSelectGroupIdx = groupIdx
  240. return true
  241. end
  242. function UIChangeServerCtr:IsCurSelectGroup(groupIdx)
  243. return (self.curSelectGroupIdx == groupIdx)
  244. end
  245. function UIChangeServerCtr:GetServerItemDataLength()
  246. if self.serverDataMap then
  247. local serverInfo = self.serverDataMap[self.curPageType]
  248. if serverInfo then
  249. if self.curPageType == Enum.ChangeServerPageType.Recommend then
  250. if serverInfo.valid and serverInfo.ServerList then
  251. return #serverInfo.ServerList
  252. end
  253. elseif self.curPageType == Enum.ChangeServerPageType.All then
  254. if self.curSelectGroupIdx then
  255. serverInfo = serverInfo[self.curSelectGroupIdx]
  256. if serverInfo and serverInfo.valid and serverInfo.ServerList then
  257. return #serverInfo.ServerList
  258. end
  259. end
  260. end
  261. end
  262. end
  263. return 0
  264. end
  265. function UIChangeServerCtr:GetServerItemDataByItemIdx(itemIdx)
  266. if self.serverDataMap then
  267. local serverInfo = self.serverDataMap[self.curPageType]
  268. if serverInfo then
  269. if self.curPageType == Enum.ChangeServerPageType.Recommend then
  270. if serverInfo.valid and serverInfo.ServerList then
  271. local serverData = serverInfo.ServerList[itemIdx + 1]
  272. return serverData, serverData
  273. end
  274. elseif self.curPageType == Enum.ChangeServerPageType.All then
  275. if self.curSelectGroupIdx then
  276. serverInfo = serverInfo[self.curSelectGroupIdx]
  277. if serverInfo and serverInfo.valid and serverInfo.ServerList then
  278. local serverData = serverInfo.ServerList[itemIdx + 1]
  279. if serverData then
  280. serverInfo = self.serverDataMap[Enum.ChangeServerPageType.Recommend]
  281. if serverInfo then
  282. if serverInfo.ServerMap[serverData.ServerId] then
  283. return serverData, serverInfo.ServerMap[serverData.ServerId]
  284. end
  285. end
  286. return serverData, serverData
  287. end
  288. end
  289. end
  290. end
  291. end
  292. end
  293. return nil, nil
  294. end
  295. function UIChangeServerCtr:GetServerGroupItemDataLength()
  296. if self.serverDataMap then
  297. local serverInfos = self.serverDataMap[self.curPageType]
  298. if serverInfos then
  299. if self.curPageType == Enum.ChangeServerPageType.All then
  300. if serverInfos.ServerGroupNum then
  301. return serverInfos.ServerGroupNum + 1
  302. end
  303. end
  304. end
  305. end
  306. return 0
  307. end
  308. function UIChangeServerCtr:GetServerGroupItemDataByItemIdx(itemIdx)
  309. if self.curPageType ~= Enum.ChangeServerPageType.All then
  310. return nil, nil
  311. end
  312. if self.serverDataMap then
  313. local serverInfos = self.serverDataMap[self.curPageType]
  314. if serverInfos then
  315. local serverGroupNum = 0
  316. if serverInfos.ServerGroupNum then
  317. serverGroupNum = serverInfos.ServerGroupNum
  318. end
  319. if itemIdx > 0 then
  320. if itemIdx < serverGroupNum then
  321. local onePageNum = serverInfos.OnePageNum
  322. if not onePageNum or onePageNum <= 0 then
  323. onePageNum = DefaultOnePageNum
  324. end
  325. local startId = (serverGroupNum - itemIdx - 1) * onePageNum + 1
  326. local endId = (serverGroupNum - itemIdx) * onePageNum
  327. return startId, endId
  328. end
  329. end
  330. end
  331. end
  332. return nil, nil
  333. end
  334. function UIChangeServerCtr:IsValidNew(time)
  335. return self.validNewInterval >= time
  336. end
  337. return UIChangeServerCtr