ServerTimeProxy.lua 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. local RemoteProxy = requireProxy("remote/RemoteProxy")
  2. local ServerTimeProxy = class("ServerTimeProxy", RemoteProxy)
  3. ServerTimeProxy.NAME = global.ProxyTable.ServerTimeProxy
  4. local cjson = require("cjson")
  5. function ServerTimeProxy:ctor()
  6. ServerTimeProxy.super.ctor(self)
  7. self._openDay = 1 --开服天数
  8. self._openTime = 0 --开服时间戳
  9. self._mergeCount = 0 --合服次数
  10. self._mergeTime = 0 --合服时间戳
  11. self._mergeDay = 0 --合区天数
  12. self._isKfState = nil
  13. self:StartTimer()
  14. self._checkResumeConnect = false
  15. self._checkDisconnectTimer = nil
  16. end
  17. function ServerTimeProxy:IsResumeConnect()
  18. return self._checkResumeConnect
  19. end
  20. function ServerTimeProxy:SetResumeConnect(param)
  21. self._checkResumeConnect = param
  22. if not param then
  23. self:OpenCheckDisconnectTimer()
  24. end
  25. end
  26. function ServerTimeProxy:OpenCheckDisconnectTimer()
  27. self:CloseCheckDisconnectTimer()
  28. self._checkDisconnectTimer = PerformWithDelayGlobal(function()
  29. local DisconnectProxy = global.Facade:retrieveProxy(global.ProxyTable.Disconnect)
  30. if DisconnectProxy:IsDisconnect() then
  31. self._checkDisconnectTimer = nil
  32. return
  33. end
  34. if not ServerTimeProxy:IsResumeConnect() then
  35. global.gameEnvironment:GetNetClient():Disconnect()
  36. end
  37. self._checkDisconnectTimer = nil
  38. end, 2)
  39. end
  40. function ServerTimeProxy:CloseCheckDisconnectTimer()
  41. if self._checkDisconnectTimer then
  42. UnSchedule(self._checkDisconnectTimer)
  43. self._checkDisconnectTimer = nil
  44. end
  45. end
  46. function ServerTimeProxy:GetOpenDay()
  47. return self._openDay
  48. end
  49. function ServerTimeProxy:GetOpenTime()
  50. return self._openTime
  51. end
  52. function ServerTimeProxy:GetMergeCount()
  53. return self._mergeCount or 0
  54. end
  55. function ServerTimeProxy:GetMergeTime()
  56. return self._mergeTime or 0
  57. end
  58. function ServerTimeProxy:GetMergeDay()
  59. return self._mergeDay or 0
  60. end
  61. function ServerTimeProxy:SetServerTime(unixtime)
  62. unixtime = unixtime or os.time()
  63. global.MMO.ServerTime_Sub = unixtime - os.time()
  64. end
  65. function ServerTimeProxy:IsKfState()
  66. return self._isKfState == 1
  67. end
  68. function ServerTimeProxy:SetKFState(state)
  69. self._isKfState = state
  70. end
  71. --kfday 开服天数
  72. --unixtime 当前时间戳
  73. --kfunixtime 开服时间戳
  74. function ServerTimeProxy:SaveTimeData(data)
  75. if not data then return end
  76. self:SetServerTime(data.unixtime)
  77. self._openDay = data.kfday
  78. self._openTime = data.kfunixtime
  79. self._mergeCount = data.hfcount
  80. self._mergeTime = data.hfunixtime
  81. self._mergeDay = data.hfday
  82. end
  83. function ServerTimeProxy:handle_MSG_SC_SERVER_TIME_RESPONSE(msg)
  84. local header = msg:GetHeader()
  85. local len = msg:GetDataLength()
  86. self:SetServerTime(header.recog)
  87. self._checkResumeConnect = true
  88. self:CloseCheckDisconnectTimer()
  89. end
  90. function ServerTimeProxy:handle_MSG_SC_ACROSS_DAY_RESPONSE(msg)
  91. local jsonData = ParseRawMsgToJson(msg)
  92. if not jsonData then return end
  93. dump(jsonData)
  94. self:SaveTimeData(jsonData)
  95. ssr.ssrBridge:OnAcrossDay()
  96. end
  97. function ServerTimeProxy:StartTimer()
  98. local function upload()
  99. self._timer = nil
  100. local LoginProxy = global.Facade:retrieveProxy(global.ProxyTable.Login)
  101. local serverIp = LoginProxy:GetSelectedServerIp()
  102. if not string.match(serverIp, "^s") then
  103. self.RequestUploadServerInfo()
  104. end
  105. end
  106. self._timer = PerformWithDelayGlobal(upload, 5 * 60)
  107. end
  108. function ServerTimeProxy:RequestUploadServerInfo(onlineNum)
  109. if global.isDebugMode or global.isGMMode then
  110. return
  111. end
  112. local LoginProxy = global.Facade:retrieveProxy(global.ProxyTable.Login)
  113. local PlayerProperty = global.Facade:retrieveProxy(global.ProxyTable.PlayerProperty)
  114. local envProxy = global.Facade:retrieveProxy(global.ProxyTable.GameEnvironment)
  115. local uploadUrl = "https://996engine.cn-hangzhou.log.aliyuncs.com/logstores/client_log/track?APIVersion=0.6.0"
  116. local UploadServerInfoDoamin = envProxy:GetCustomDataByKey("UploadServerInfoDoamin")
  117. if UploadServerInfoDoamin and string.len(UploadServerInfoDoamin) > 0 then
  118. uploadUrl = UploadServerInfoDoamin .. "/logstores/client_log/track?APIVersion=0.6.0"
  119. end
  120. local device = ""
  121. if global.isWindows then
  122. device = "pc"
  123. elseif global.isAndroid or global.isOHOS then
  124. device = "android"
  125. elseif global.isIOS then
  126. device = "ios"
  127. end
  128. local data = {}
  129. data.operateType = 1 --类型
  130. data.onlineNum = onlineNum
  131. data.resRemoteVer = global.L_ModuleManager:GetCurrentModule():GetRemoteVersion()
  132. data.gameid = global.L_ModuleManager:GetCurrentModule():GetOperID()
  133. data.channelid = envProxy:GetChannelID()
  134. data.promote_id = global.L_GameEnvManager:GetEnvDataByKey("promote_id")
  135. data.serverId = LoginProxy:GetSelectedServerId()
  136. data.serverName = LoginProxy:GetSelectedServerName()
  137. data.serverIp = LoginProxy:GetSelectedServerIp()
  138. data.serverPort = LoginProxy:GetGameServerPort()
  139. data.serverVer = LoginProxy:GetServiceVer()
  140. data.roleName = LoginProxy:GetSelectedRoleName()
  141. data.roleId = LoginProxy:GetSelectedRoleID()
  142. data.roleLevel = PlayerProperty:GetRoleLevel()
  143. data.device_type = device
  144. local suffix = ""
  145. for key, value in pairs(data) do
  146. if value then
  147. suffix = suffix .. string.format("&%s=%s", key, value)
  148. end
  149. end
  150. local function httpCB(success, response)
  151. if not success then
  152. return false
  153. end
  154. print(response)
  155. end
  156. local url = uploadUrl .. suffix
  157. HTTPRequest(url, httpCB)
  158. releasePrint("RequestServer_Upload url: " .. url)
  159. end
  160. function ServerTimeProxy:handle_MSG_SC_SERVER_INFO_UPLOAD(msg)
  161. local header = msg:GetHeader()
  162. if header and header.recog > 0 then -- 实际人数
  163. self:RequestUploadServerInfo(header.recog)
  164. end
  165. end
  166. function ServerTimeProxy:RegisterMsgHandler()
  167. ServerTimeProxy.super.RegisterMsgHandler(self)
  168. local msgType = global.MsgType
  169. LuaRegisterMsgHandler(msgType.MSG_SC_SERVER_TIME_RESPONSE, handler(self, self.handle_MSG_SC_SERVER_TIME_RESPONSE)) -- 返回服务器时间
  170. LuaRegisterMsgHandler(msgType.MSG_SC_ACROSS_DAY_RESPONSE, handler(self, self.handle_MSG_SC_ACROSS_DAY_RESPONSE))
  171. LuaRegisterMsgHandler(msgType.MSG_SC_SERVER_INFO_UPLOAD, handler(self, self.handle_MSG_SC_SERVER_INFO_UPLOAD))
  172. end
  173. return ServerTimeProxy