| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360 |
- local UIChangeServerCtr = class("UIChangeServerCtr", require("UICtrBase"))
- local DefaultOnePageNum = 10
- function UIChangeServerCtr:Init(view)
- self.view = view
- end
- ---@param data boolean 是否直接重登
- function UIChangeServerCtr:SetData(data)
- self.asyncIdx = 0
- if data == nil then return end
- self.data = data
- end
- function UIChangeServerCtr:GetAsyncIdx()
- self.asyncIdx = self.asyncIdx + 1
- return self.asyncIdx
- end
- function UIChangeServerCtr:GetData()
- return self.data
- end
- function UIChangeServerCtr:OnDispose()
- self.validNewInterval = nil
- self.curPageType = nil
- self.curSelectGroupIdx = nil
- self.serverDataMap = nil
- self.serverLastReqMap = nil
- self.data = nil
- self.view = nil
- end
- function UIChangeServerCtr:InitData()
- -- if self.data then
- -- for _, value in pairs(Enum.ChangeServerPageType) do
- -- if value == self.data then
- -- self.curPageType = value
- -- break
- -- end
- -- end
- -- end
- self.validNewInterval = GlobalConfig.Instance:GetConfigIntValue(303)
- self.curPageType = Enum.ChangeServerPageType.Recommend
- self.curSelectGroupIdx = nil
- end
- function UIChangeServerCtr:IsOnlyChangeServer()
- return self.data
- end
- function UIChangeServerCtr:GetCurPageType()
- return self.curPageType
- end
- function UIChangeServerCtr:SetCurPageType(pageType)
- if self.curPageType == pageType then
- return false
- end
- self.curPageType = pageType
- self.curSelectGroupIdx = nil
- return true
- end
- function UIChangeServerCtr:CheckCacheData()
- if self.serverDataMap then
- local serverInfo = self.serverDataMap[self.curPageType]
- if serverInfo then
- if self.curPageType == Enum.ChangeServerPageType.Recommend then
- if serverInfo.valid then
- if serverInfo.lastUpdteTime then
- if (Time.realtimeSinceStartup - serverInfo.lastUpdteTime) <= 5 then
- return false
- end
- end
- serverInfo.valid = false
- end
- elseif self.curPageType == Enum.ChangeServerPageType.All then
- if self.curSelectGroupIdx then
- serverInfo = serverInfo[self.curSelectGroupIdx]
- if serverInfo then
- if serverInfo.valid then
- if serverInfo.lastUpdteTime then
- if (Time.realtimeSinceStartup - serverInfo.lastUpdteTime) <= 5 then
- return false
- end
- end
- serverInfo.valid = false
- end
- end
- end
- end
- end
- end
- return true
- end
- function UIChangeServerCtr:IsCurServer(serverId)
- return ManagerContainer.LuaGameMgr.serverData.id == serverId
- end
- function UIChangeServerCtr:UpdateServerData(serverJson, pageType, pageId)
- if not pageType then
- return false
- end
- if serverJson then
- if not self.serverDataMap then
- self.serverDataMap = {}
- end
- if pageType == Enum.ChangeServerPageType.Recommend then
- local serverInfo = self.serverDataMap[pageType]
- if not serverInfo then
- serverInfo = {}
- self.serverDataMap[pageType] = serverInfo
- end
- local ServerList = serverJson
- serverInfo.ServerList = ServerList
- local ServerMap = serverInfo.ServerMap
- if not ServerMap then
- ServerMap = {}
- serverInfo.ServerMap = ServerMap
- end
- serverInfo.lastUpdteTime = Time.realtimeSinceStartup
- serverInfo.valid = true
- local serverData = ManagerContainer.LuaGameMgr.serverData
- local serverId = serverData.id
- local serverIp = serverData.ip
- local hasSelfServer = false
- for _, value in pairs(ServerList) do
- if value.ServerId then
- ServerMap[value.ServerId] = value
- if value.ServerId == serverId then
- hasSelfServer = true
- if value.Ip ~= serverIp then
- LogError('Recommend Server and Current Server is not match !!!')
- LogError('recommend server : ' .. Inspect(value))
- LogError('current server : id : ' .. tostring(serverId) .. ' ip : ' .. tostring(serverIp))
- end
- end
- end
- end
- if not hasSelfServer then
- if serverId and serverId > 0 then
- local userData = ManagerContainer.DataMgr.UserData
- if userData and userData:IsInitedOver() then
- local curServerData = {
- ServerId = serverId,
- ServerName = serverData.name,
- HeadFrameId = userData:GetHeadFrameId(),
- Level = userData:GetRoleLv(),
- Gender = userData:GetSex(),
- NickName = userData:GetUserNickname(),
- RecordTime = ManagerContainer.LuaTimerMgr:GetTimeSecond(),
- JobCfgId = userData:GetHeroJobCfgId(),
- Ip = serverIp,
- Port = serverData.ports,
- State = serverData.state,
- New = false,
- STime = os.date('%Y-%m-%d %H:%M:%S', os.time())
- }
- ServerMap[serverId] = curServerData
- ServerList[#ServerList + 1] = curServerData
- end
- end
- end
- table.sort(ServerList, function(a, b)
- if a.ServerId == serverId then
- return true
- end
- if b.ServerId == serverId then
- return false
- end
- local hasRoleA = (a.Gender and a.Gender > 0 and a.JobCfgId and a.JobCfgId > 0 and a.Level and a.Level > 0)
- local hasRoleB = (b.Gender and b.Gender > 0 and b.JobCfgId and b.JobCfgId > 0 and b.Level and b.Level > 0)
- if hasRoleA == hasRoleB then
- if a.New == b.New then
- return a.ServerId > b.ServerId
- else
- return (not a.New)
- end
- else
- return hasRoleA
- end
- end)
- elseif pageType == Enum.ChangeServerPageType.All then
- local serverInfos = self.serverDataMap[pageType]
- if not serverInfos then
- serverInfos = {}
- serverInfos.OnePageNum = DefaultOnePageNum
- self.serverDataMap[pageType] = serverInfos
- end
- if serverJson.Page and serverJson.Page > 0 and serverInfos.OnePageNum ~= serverJson.Page then
- serverInfos.OnePageNum = serverJson.Page
- if serverInfos.ServerNum then
- serverInfos.ServerGroupNum = Mathf.Ceil(serverInfos.ServerNum / serverInfos.OnePageNum) + 1
- end
- end
- if serverJson.MaxServerId and serverJson.MaxServerId > 0 and serverInfos.ServerNum ~= serverJson.MaxServerId then
- serverInfos.ServerNum = serverJson.MaxServerId
- if serverInfos.OnePageNum then
- serverInfos.ServerGroupNum = Mathf.Ceil(serverInfos.ServerNum / serverInfos.OnePageNum) + 1
- else
- serverInfos.ServerGroupNum = Mathf.Ceil(serverInfos.ServerNum / DefaultOnePageNum) + 1
- end
- end
- local serverGroupNum = 0
- if serverInfos.ServerGroupNum then
- serverGroupNum = serverInfos.ServerGroupNum
- end
- if not pageId or pageId <= 0 then
- pageId = 1
- else
- pageId = serverGroupNum - pageId
- end
- if not self.curSelectGroupIdx then
- self.curSelectGroupIdx = pageId
- end
- if serverJson.ServerList then
- table.sort(serverJson.ServerList, function(a, b)
- return a.ServerId > b.ServerId
- end)
- local serverInfo = serverInfos[pageId]
- if not serverInfo then
- serverInfo = {}
- serverInfos[pageId] = serverInfo
- end
- serverInfo.ServerList = serverJson.ServerList
- serverInfo.lastUpdteTime = Time.realtimeSinceStartup
- serverInfo.valid = true
- end
- end
- end
- end
- function UIChangeServerCtr:GetCurSelectServerGroupIdx()
- if self.curSelectGroupIdx then
- if self.serverDataMap then
- local serverInfos = self.serverDataMap[self.curPageType]
- if serverInfos then
- if serverInfos.ServerGroupNum then
- return serverInfos.ServerGroupNum - self.curSelectGroupIdx
- end
- end
- end
- end
- return nil
- end
- function UIChangeServerCtr:SetCurSelectGroupIdx(groupIdx)
- if self.curSelectGroupIdx == groupIdx then
- return false
- end
- self.curSelectGroupIdx = groupIdx
- return true
- end
- function UIChangeServerCtr:IsCurSelectGroup(groupIdx)
- return (self.curSelectGroupIdx == groupIdx)
- end
- function UIChangeServerCtr:GetServerItemDataLength()
- if self.serverDataMap then
- local serverInfo = self.serverDataMap[self.curPageType]
- if serverInfo then
- if self.curPageType == Enum.ChangeServerPageType.Recommend then
- if serverInfo.valid and serverInfo.ServerList then
- return #serverInfo.ServerList
- end
- elseif self.curPageType == Enum.ChangeServerPageType.All then
- if self.curSelectGroupIdx then
- serverInfo = serverInfo[self.curSelectGroupIdx]
- if serverInfo and serverInfo.valid and serverInfo.ServerList then
- return #serverInfo.ServerList
- end
- end
- end
- end
- end
- return 0
- end
- function UIChangeServerCtr:GetServerItemDataByItemIdx(itemIdx)
- if self.serverDataMap then
- local serverInfo = self.serverDataMap[self.curPageType]
- if serverInfo then
- if self.curPageType == Enum.ChangeServerPageType.Recommend then
- if serverInfo.valid and serverInfo.ServerList then
- local serverData = serverInfo.ServerList[itemIdx + 1]
- return serverData, serverData
- end
- elseif self.curPageType == Enum.ChangeServerPageType.All then
- if self.curSelectGroupIdx then
- serverInfo = serverInfo[self.curSelectGroupIdx]
- if serverInfo and serverInfo.valid and serverInfo.ServerList then
- local serverData = serverInfo.ServerList[itemIdx + 1]
- if serverData then
- serverInfo = self.serverDataMap[Enum.ChangeServerPageType.Recommend]
- if serverInfo then
- if serverInfo.ServerMap[serverData.ServerId] then
- return serverData, serverInfo.ServerMap[serverData.ServerId]
- end
- end
- return serverData, serverData
- end
- end
- end
- end
- end
- end
- return nil, nil
- end
- function UIChangeServerCtr:GetServerGroupItemDataLength()
- if self.serverDataMap then
- local serverInfos = self.serverDataMap[self.curPageType]
- if serverInfos then
- if self.curPageType == Enum.ChangeServerPageType.All then
- if serverInfos.ServerGroupNum then
- return serverInfos.ServerGroupNum + 1
- end
- end
- end
- end
- return 0
- end
- function UIChangeServerCtr:GetServerGroupItemDataByItemIdx(itemIdx)
- if self.curPageType ~= Enum.ChangeServerPageType.All then
- return nil, nil
- end
- if self.serverDataMap then
- local serverInfos = self.serverDataMap[self.curPageType]
- if serverInfos then
- local serverGroupNum = 0
- if serverInfos.ServerGroupNum then
- serverGroupNum = serverInfos.ServerGroupNum
- end
- if itemIdx > 0 then
- if itemIdx < serverGroupNum then
- local onePageNum = serverInfos.OnePageNum
- if not onePageNum or onePageNum <= 0 then
- onePageNum = DefaultOnePageNum
- end
- local startId = (serverGroupNum - itemIdx - 1) * onePageNum + 1
- local endId = (serverGroupNum - itemIdx) * onePageNum
- return startId, endId
- end
- end
- end
- end
- return nil, nil
- end
- function UIChangeServerCtr:IsValidNew(time)
- return self.validNewInterval >= time
- end
- return UIChangeServerCtr
|