Module_launcher.lua 29 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024
  1. local ModuleGameEnv = class("ModuleGameEnv")
  2. local SubMod = class( "SubMod" )
  3. local Module = class( "Module" )
  4. local cjson = require("cjson")
  5. local DefaultVersionChannel = "1"
  6. function ModuleGameEnv:ctor(module)
  7. self.module = module
  8. self.loginData = nil
  9. self.serverData = nil
  10. self.customData = nil
  11. self.refer = nil
  12. self.selectedServer = nil
  13. self.lastservers = {}
  14. self.selfip = nil
  15. self.isWhitelist = false
  16. end
  17. function ModuleGameEnv:Cleanup()
  18. self.loginData = nil
  19. self.serverData = nil
  20. self.customData = nil
  21. self.refer = nil
  22. self.selectedServer = nil
  23. self.lastservers = {}
  24. self.roleinfo = nil
  25. end
  26. function ModuleGameEnv:SetLoginData(data)
  27. self.loginData = data
  28. end
  29. function ModuleGameEnv:GetLoginData()
  30. return self.loginData
  31. end
  32. function ModuleGameEnv:SetServerData(data)
  33. self.serverData = data
  34. end
  35. function ModuleGameEnv:GetServerData()
  36. return self.serverData
  37. end
  38. function ModuleGameEnv:SetCustomData(data)
  39. self.customData = data
  40. end
  41. function ModuleGameEnv:GetCustomData()
  42. return self.customData
  43. end
  44. function ModuleGameEnv:SetCustomUrl(url)
  45. self.customURL = url
  46. end
  47. function ModuleGameEnv:GetCustomUrl()
  48. return self.customURL
  49. end
  50. function ModuleGameEnv:SetCustomIsLoaded(b)
  51. self.isCustomURLLoaded = b
  52. end
  53. function ModuleGameEnv:GetCustomIsLoaded()
  54. return self.isCustomURLLoaded
  55. end
  56. function ModuleGameEnv:IsNewServerlist()
  57. return self.isNewServerlist
  58. end
  59. function ModuleGameEnv:SetIsNewServerlist(b)
  60. self.isNewServerlist = b
  61. end
  62. function ModuleGameEnv:GetCustomDataByKey(key)
  63. return self.customData and self.customData[key]
  64. end
  65. function ModuleGameEnv:SetCustomDataByKey(key, value)
  66. if self.customData then
  67. self.customData[key] = value
  68. end
  69. end
  70. function ModuleGameEnv:SetSelfip(ip)
  71. self.selfip = ip
  72. if not self.serverData then
  73. return nil
  74. end
  75. local whitelist = self.serverData.whitelist
  76. local uidWhiteList = self.serverData.uidWhiteList
  77. if not whitelist and not uidWhiteList then
  78. return nil
  79. end
  80. for _, v in pairs(whitelist or {}) do
  81. if v == self.selfip then
  82. self.isWhitelist = true
  83. break
  84. end
  85. end
  86. if not self.isWhitelist then
  87. local uid = self:GetLoginUid()
  88. uid = uid and tostring(uid) or nil
  89. for k,v in pairs(uidWhiteList or {}) do
  90. if uid and uid == tostring(v) then
  91. self.isWhitelist = true
  92. break
  93. end
  94. end
  95. end
  96. end
  97. function ModuleGameEnv:IsWhitelist()
  98. -- 盒子传入白名单
  99. if cc.Application:getInstance():getTargetPlatform() == cc.PLATFORM_OS_WINDOWS then
  100. if global.L_GameEnvManager:GetLauncherWhitelist() then
  101. return true
  102. end
  103. end
  104. return self.isWhitelist
  105. end
  106. function ModuleGameEnv:GetSrvlist(all)
  107. if not self.serverData then
  108. return {}
  109. end
  110. if all then
  111. return self.serverData.srvlist
  112. end
  113. local isWhitelist = self:IsWhitelist()
  114. local items = {}
  115. for _, v in ipairs(self.serverData.srvlist) do
  116. if not (v.state == 5 and (not isWhitelist)) then
  117. table.insert(items, v)
  118. end
  119. end
  120. return items
  121. end
  122. function ModuleGameEnv:GetResVersion()
  123. if not self.serverData or not self.serverData.resVer then
  124. return "?v=1.1.1"
  125. end
  126. return self.serverData.resVer
  127. end
  128. function ModuleGameEnv:GetResDownloadUrl()
  129. if not self.serverData or not self.serverData.resURL then
  130. return global.L_GameEnvManager:GetRootDomain()
  131. end
  132. return self.serverData.resURL
  133. end
  134. function ModuleGameEnv:GetResDownloadUrl2()
  135. if not self.serverData or not self.serverData.resURL2 then
  136. return global.L_GameEnvManager:GetRootDomain2()
  137. end
  138. return self.serverData.resURL2
  139. end
  140. function ModuleGameEnv:GetSceneDownloadUrl()
  141. if not self.serverData or not self.serverData.sceneURL then
  142. return self:GetResDownloadUrl()
  143. end
  144. return self.serverData.sceneURL
  145. end
  146. function ModuleGameEnv:GetSceneDownloadVer()
  147. if not self.serverData or not self.serverData.sceneResVer then
  148. return self:GetResVersion()
  149. end
  150. return self.serverData.sceneResVer
  151. end
  152. function ModuleGameEnv:GetGMResURL()
  153. if not self.serverData or not self.serverData.gmResURL then
  154. return nil
  155. end
  156. return self.serverData.gmResURL
  157. end
  158. function ModuleGameEnv:GetGMResURL2()
  159. if not self.serverData or not self.serverData.gmResURL2 then
  160. return nil
  161. end
  162. return self.serverData.gmResURL2
  163. end
  164. function ModuleGameEnv:GetGMResVer()
  165. if not self.serverData or not self.serverData.gmResVer then
  166. return nil
  167. end
  168. return self.serverData.gmResVer
  169. end
  170. function ModuleGameEnv:GetGMWebResUrl()
  171. if not self.serverData or not self.serverData.gmWebResURL then
  172. return nil
  173. end
  174. return self.serverData.gmWebResURL
  175. end
  176. function ModuleGameEnv:GetGMWebResVer()
  177. if not self.serverData or not self.serverData.gmWebResVer then
  178. return nil
  179. end
  180. return self.serverData.gmWebResVer
  181. end
  182. function ModuleGameEnv:GetGMInitResURL()
  183. if not self.serverData or not self.serverData.gmInitResURL then
  184. return nil
  185. end
  186. return self.serverData.gmInitResURL
  187. end
  188. function ModuleGameEnv:GetGMInitResURL2()
  189. if not self.serverData or not self.serverData.gmInitResURL2 then
  190. return nil
  191. end
  192. return self.serverData.gmInitResURL2
  193. end
  194. function ModuleGameEnv:GetGMInitResVer()
  195. if not self.serverData or not self.serverData.gmInitResVer then
  196. return nil
  197. end
  198. return self.serverData.gmInitResVer
  199. end
  200. function ModuleGameEnv:SetRefer(refer)
  201. self.refer = refer
  202. end
  203. function ModuleGameEnv:GetRefer()
  204. return self.refer
  205. end
  206. function ModuleGameEnv:GetServerByID(srvid)
  207. local srvlist = self:GetSrvlist()
  208. for k, v in pairs(srvlist) do
  209. if tostring(v.serverId) == tostring(srvid) then
  210. return v
  211. end
  212. end
  213. return nil
  214. end
  215. function ModuleGameEnv:SetSelectedServer(server)
  216. self.selectedServer = server
  217. end
  218. function ModuleGameEnv:GetSelectedServer()
  219. return self.selectedServer
  220. end
  221. function ModuleGameEnv:GetSelectedServerUrlSuffix()
  222. if not self.selectedServer or not self.selectedServer.urlSuffix then
  223. return DefaultVersionChannel
  224. end
  225. return self.selectedServer.urlSuffix
  226. end
  227. function ModuleGameEnv:GetLastservers()
  228. return self.lastservers
  229. end
  230. -- 先行服资源版本 修改下载资源地址
  231. function ModuleGameEnv:GetSelectedServerGmurlsuffix()
  232. if not self.selectedServer or not self.selectedServer.gmurlsuffix then
  233. return
  234. end
  235. return self.selectedServer.gmurlsuffix
  236. end
  237. function ModuleGameEnv:ReadLastServers()
  238. if not self.serverData then
  239. return nil
  240. end
  241. --只针对美杜莎云游戏,根据安卓层传过来的区服id进行显示
  242. local lastServerID = global.L_NativeBridgeManager:getLastServerID()
  243. if lastServerID then
  244. self.selectedServer = self:GetServerByID(lastServerID)
  245. end
  246. -- 盒子传入的
  247. local launcherSrvid = global.L_GameEnvManager:GetLauncherSrvID()
  248. if not self.selectedServer and launcherSrvid then
  249. self.selectedServer = self:GetServerByID(launcherSrvid)
  250. end
  251. -- 上次选择
  252. if not self.selectedServer then
  253. local userData = UserData:new(self.module:GetID() .. "_data")
  254. local jsonStr = userData:getStringForKey("lastservers", "")
  255. if jsonStr and string.len(jsonStr) > 0 then
  256. local jsonData = cjson.decode(jsonStr) or {}
  257. local lastsrvid = jsonData[1]
  258. if not self.selectedServer and lastsrvid and lastsrvid ~= "" then
  259. self.selectedServer = self:GetServerByID(lastsrvid)
  260. end
  261. if jsonData and jsonData[3] then
  262. jsonData[3] = nil
  263. end
  264. self.lastservers = jsonData
  265. else
  266. self.lastservers = {}
  267. end
  268. end
  269. if not self.lastservers or #self.lastservers == 0 then
  270. local items = self:GetHasRoleSrvItems(true)
  271. if items and items[1] then
  272. self.lastservers[1] = items[1].serverId
  273. if not self.selectedServer and self.lastservers[1] and self.lastservers[1] ~= "" then
  274. self.selectedServer = self:GetServerByID(self.lastservers[1])
  275. end
  276. end
  277. if items and items[2] then
  278. self.lastservers[2] = items[2].serverId
  279. end
  280. end
  281. -- 推荐服
  282. if not self.selectedServer and self.refer then
  283. self.selectedServer = self:GetServerByID(self.refer)
  284. end
  285. -- 最后一个服务器
  286. if not self.selectedServer then
  287. local srvlist = self:GetSrvlist()
  288. self.selectedServer = srvlist[#srvlist]
  289. end
  290. end
  291. function ModuleGameEnv:SaveLastServers()
  292. if not self.serverData then
  293. return nil
  294. end
  295. -- 已选择存储到本地
  296. local lastserversN = {}
  297. table.insert(lastserversN, self.selectedServer.serverId)
  298. for i, v in ipairs(self.lastservers) do
  299. if v ~= self.selectedServer.serverId and #lastserversN < 2 then
  300. table.insert(lastserversN, v)
  301. end
  302. end
  303. local userData = UserData:new(self.module:GetID() .. "_data")
  304. local jsonStr = cjson.encode(lastserversN)
  305. userData:setStringForKey("lastservers", jsonStr)
  306. userData:writeMapDataToFile()
  307. end
  308. function ModuleGameEnv:RequestRoleInfo(func)
  309. if nil == self.module:GetOperID() then
  310. return false
  311. end
  312. local uid = self:GetLoginUid()
  313. if uid == nil then
  314. return
  315. end
  316. local downUrl = ""
  317. local RoleRecordDoamin = self:GetCustomDataByKey("RoleRecordDoamin")
  318. if RoleRecordDoamin and string.len(RoleRecordDoamin) > 0 then
  319. downUrl = RoleRecordDoamin
  320. end
  321. if downUrl and string.len(downUrl) > 0 then
  322. downUrl = string.format("%s/user_server/game_%s/user_%s.txt?time=%s", downUrl, self.module:GetOperID(), uid, os.time())
  323. -- http数据请求回调
  324. local function callback(success, response)
  325. if not success then
  326. if func then
  327. func()
  328. end
  329. release_print("request roleinfo error: step 1, http callback! failed")
  330. return false
  331. end
  332. local jsonData = cjson.decode(response)
  333. -- json decode error
  334. if not jsonData then
  335. if func then
  336. func()
  337. end
  338. release_print("request roleinfo error: step 2, http callback! json decode error")
  339. return false
  340. end
  341. dump(jsonData)
  342. if func then
  343. func(jsonData)
  344. end
  345. end
  346. HTTPRequest(downUrl, callback)
  347. end
  348. return true
  349. end
  350. function ModuleGameEnv:UploadRoleInfo()
  351. if nil == self.module:GetOperID() then
  352. return false
  353. end
  354. local uid = self:GetLoginUid()
  355. local token = self:GetLoginToken()
  356. if nil == uid then
  357. return false
  358. end
  359. if nil == token then
  360. return false
  361. end
  362. if not self.roleinfo then
  363. return nil
  364. end
  365. if type(self.roleinfo) ~= "table" then
  366. return nil
  367. end
  368. if uid then
  369. local jsonStr = cjson.encode(self.roleinfo)
  370. local upLoadUrl = ""
  371. local RoleRecordUpLoadDoamin = self:GetCustomDataByKey("RoleRecordUpLoadDoamin")
  372. if RoleRecordUpLoadDoamin and string.len(RoleRecordUpLoadDoamin) > 0 then
  373. upLoadUrl = RoleRecordUpLoadDoamin
  374. end
  375. if upLoadUrl and string.len(upLoadUrl) > 0 then
  376. upLoadUrl = string.format("%s/api/user/upload_play_history",upLoadUrl)
  377. local HTTPRequestPostFile = function(url, callback, data)
  378. local httpRequest = cc.XMLHttpRequest:new()
  379. httpRequest.responseType = cc.XMLHTTPREQUEST_RESPONSE_JSON
  380. httpRequest.timeout = 100000 -- 10 s
  381. httpRequest:open("POST", url)
  382. if callback then
  383. local function HttpResponseCB()
  384. local code = httpRequest.status
  385. local success = code >= 200 and code < 300
  386. local response = httpRequest.response
  387. callback(success,code,response)
  388. releasePrint("Http Request Code:" .. tostring(code))
  389. end
  390. httpRequest:setRequestHeader("Content-type", "multipart/form-data, boundary=upload_ymyzt")
  391. httpRequest:setRequestHeader("x-token", token or "")
  392. httpRequest:registerScriptHandler(HttpResponseCB)
  393. end
  394. httpRequest:send(data)
  395. end
  396. local filename = string.format("user_%s.txt", uid)
  397. local body = "--upload_ymyzt\r\n"..
  398. "content-disposition: form-data; name=\"game_id\"\r\n"..
  399. "\r\n" ..
  400. self.module:GetOperID().."\r\n"..
  401. "--upload_ymyzt\r\n"..
  402. 'content-disposition: form-data; name="file"; filename="'..filename..'"\r\n' ..
  403. "Content-Type: text/plain\r\n" ..
  404. "\r\n" ..
  405. jsonStr.."\r\n" ..
  406. "--upload_ymyzt--\r\n"
  407. HTTPRequestPostFile(upLoadUrl,function(success,code,response)
  408. dump({success,code,response},"HTTPRequestPostFile___")
  409. end,body)
  410. end
  411. end
  412. return true
  413. end
  414. function ModuleGameEnv:GetRoleInfoByServerID(serverID)
  415. if not self.roleinfo then
  416. return 0
  417. end
  418. serverID = tostring(serverID)
  419. if not self.roleinfo[serverID] then
  420. return 0
  421. end
  422. if type(self.roleinfo[serverID]) ~= "table" then
  423. return 0
  424. end
  425. return tonumber(self.roleinfo[serverID].count) or 0
  426. end
  427. function ModuleGameEnv:GetRoleinfo()
  428. return self.roleinfo
  429. end
  430. function ModuleGameEnv:SetRoleinfo(roleInfo)
  431. self.roleinfo = roleInfo
  432. end
  433. function ModuleGameEnv:SetRoleCountByServerID(serverID, count)
  434. if not self.roleinfo then
  435. self.roleinfo = {}
  436. end
  437. serverID = tostring(serverID)
  438. self.roleinfo[serverID] = {count = count , time = os.time()}
  439. self:savelocalRoleinfo()
  440. self:UploadRoleInfo()
  441. end
  442. function ModuleGameEnv:GetHasRoleSrvItems(largerSort)
  443. local srvlist = self:GetSrvlist()
  444. if not srvlist then
  445. return nil
  446. end
  447. local srvById = {}
  448. for i, v in ipairs(srvlist) do
  449. srvById[tostring(v.serverId)] = v
  450. end
  451. local items = {}
  452. local roleCount
  453. local srvId
  454. local roleinfo = self:GetRoleinfo()
  455. if not roleinfo then
  456. return nil
  457. end
  458. local roleInfoVec = {}
  459. for srvId, v in pairs(roleinfo) do
  460. if type(v) ~= "table" then
  461. v = {}
  462. end
  463. table.insert(roleInfoVec,{serverID = srvId , count = v.count or 0, time = v.time or 0})
  464. end
  465. table.sort(roleInfoVec, function (a ,b)
  466. if largerSort then
  467. return a.time > b.time
  468. else
  469. return a.time < b.time
  470. end
  471. end)
  472. for i, v in ipairs(roleInfoVec) do
  473. roleCount = tonumber(v.count) or 0
  474. srvId = tostring(v.serverID) or ""
  475. if roleCount > 0 and srvById[srvId] then
  476. table.insert(items, srvById[srvId] )
  477. end
  478. end
  479. return items
  480. end
  481. -- function ModuleGameEnv:checkLocalRoleinfo()
  482. -- if nil == global.L_GameEnvManager:GetChannelID() then
  483. -- return false
  484. -- end
  485. -- if nil == self.module:GetOperID() then
  486. -- return false
  487. -- end
  488. -- local uid = self:GetLoginUid()
  489. -- if nil == uid then
  490. -- return false
  491. -- end
  492. -- if nil == global.L_ModuleManager:GetLauncherModuleID() then
  493. -- return false
  494. -- end
  495. -- -- 本地数据超时,不再使用
  496. -- local launcherModID = global.L_ModuleManager:GetLauncherModuleID()
  497. -- local userData = UserData:new(launcherModID .. "_data")
  498. -- local srvlistTimeout = tonumber(self:GetCustomDataByKey("srvlistTimeout"))
  499. -- local lastUnixtime = userData:getIntegerForKey("last_unixtime", 0)
  500. -- local currUnixtime = os.time()
  501. -- if nil == lastUnixtime or 0 == lastUnixtime or (srvlistTimeout and currUnixtime - lastUnixtime > srvlistTimeout) then
  502. -- -- 重置本地上次拉取时间戳
  503. -- userData:setIntegerForKey("last_unixtime", currUnixtime)
  504. -- userData:writeMapDataToFile()
  505. -- return false
  506. -- end
  507. -- -- 本地读取
  508. -- self:readLocalRoleinfo()
  509. -- -- 本地有数据
  510. -- if self.roleinfo then
  511. -- global.L_ModuleChooseManager:OnServerRoleInfoResp()
  512. -- return true
  513. -- end
  514. -- return false
  515. -- end
  516. function ModuleGameEnv:savelocalRoleinfo()
  517. if not self.roleinfo then
  518. return nil
  519. end
  520. if type(self.roleinfo) ~= "table" then
  521. return nil
  522. end
  523. if nil == self.module:GetOperID() then
  524. return false
  525. end
  526. local uid = self:GetLoginUid()
  527. if not uid then
  528. return false
  529. end
  530. uid = tostring(uid)
  531. if uid and string.len(uid) > 0 then
  532. local fileUtil = cc.FileUtils:getInstance()
  533. local filename = self.module:GetID() .. "_roleinfoNew" .. uid
  534. local localStoragePath = fileUtil:getWritablePath() .. filename
  535. local jsonStr = cjson.encode(self.roleinfo)
  536. fileUtil:writeStringToFile(jsonStr, localStoragePath)
  537. end
  538. end
  539. function ModuleGameEnv:readLocalRoleinfo()
  540. self.roleinfo = nil
  541. local uid = self:GetLoginUid()
  542. if not uid then
  543. return nil
  544. end
  545. uid = tostring(uid)
  546. if nil == self.module:GetOperID() then
  547. return nil
  548. end
  549. if uid and string.len(uid) > 0 then
  550. local fileUtil = cc.FileUtils:getInstance()
  551. local filename = self.module:GetID() .. "_roleinfoNew" .. uid
  552. local localStoragePath = fileUtil:getWritablePath() .. filename
  553. if fileUtil:isFileExist(localStoragePath) then
  554. local jsonStr = fileUtil:getDataFromFileEx(localStoragePath)
  555. if jsonStr and jsonStr ~= "" then
  556. self.roleinfo = cjson.decode(jsonStr)
  557. end
  558. end
  559. end
  560. end
  561. function ModuleGameEnv:GetLoginUid()
  562. local uid = global.L_NativeBridgeManager:GetUsername()
  563. if nil == uid then
  564. --盒子uid
  565. local boxuid = global.L_GameEnvManager:GetEnvDataByKey("uid")
  566. local boxtoken = nil
  567. if boxtoken == nil or boxtoken == "" then
  568. boxtoken = global.L_GameEnvManager:GetEnvDataByKey("new_boxtoken")
  569. end
  570. if boxtoken == nil or boxtoken == "" then
  571. boxtoken = global.L_GameEnvManager:GetEnvDataByKey("token")
  572. end
  573. if boxuid and boxtoken then
  574. uid = boxuid
  575. end
  576. if not uid then
  577. --pc 联运
  578. local PCPlatform = global.L_GameEnvManager:GetEnvDataByKey("PCPlatform")
  579. local user_id = global.L_GameEnvManager:GetEnvDataByKey("user_id")
  580. local token = global.L_GameEnvManager:GetEnvDataByKey("token")
  581. if PCPlatform and user_id and token then
  582. uid = user_id
  583. end
  584. end
  585. end
  586. return uid
  587. end
  588. function ModuleGameEnv:GetLoginToken()
  589. local token = global.L_NativeBridgeManager:GetPassword()
  590. if nil == token then
  591. local boxuid = global.L_GameEnvManager:GetEnvDataByKey("uid")
  592. local boxtoken = nil
  593. if boxtoken == nil or boxtoken == "" then
  594. boxtoken = global.L_GameEnvManager:GetEnvDataByKey("new_boxtoken")
  595. end
  596. if boxtoken == nil or boxtoken == "" then
  597. boxtoken = global.L_GameEnvManager:GetEnvDataByKey("token")
  598. end
  599. if boxuid and boxtoken then
  600. token = boxtoken
  601. end
  602. if not token then
  603. --pc 联运
  604. local PCPlatform = global.L_GameEnvManager:GetEnvDataByKey("PCPlatform")
  605. local user_id = global.L_GameEnvManager:GetEnvDataByKey("user_id")
  606. local PCtoken = global.L_GameEnvManager:GetEnvDataByKey("token")
  607. if PCPlatform and user_id and PCtoken then
  608. token = PCtoken
  609. end
  610. end
  611. end
  612. return token
  613. end
  614. -------------------------------------------------------------
  615. -- sub module
  616. function SubMod:ctor(info, id, name, operid, Sign, xk, platformId)
  617. self.info = info
  618. self.id = id or ""
  619. self.name = name or ""
  620. self.operid = operid or ""
  621. self.Sign = Sign or false
  622. self.xk = decodeXK(xk)
  623. self.gameEnv = ModuleGameEnv.new(self)
  624. self.originVer = ""
  625. self.cacheVer = ""
  626. self.remoteVer = ""
  627. self.platformId = platformId
  628. end
  629. function SubMod:GetSubModInfo()
  630. return self.info
  631. end
  632. function SubMod:GetID()
  633. return self.id
  634. end
  635. function SubMod:GetName()
  636. return self.name
  637. end
  638. function SubMod:GetOperID()
  639. return self.operid
  640. end
  641. function SubMod:GetGameEnv()
  642. return self.gameEnv
  643. end
  644. function SubMod:GetIsSign()
  645. return self.Sign and self.Sign == 1
  646. end
  647. function SubMod:GetXK()
  648. return self.xk
  649. end
  650. function SubMod:GetPlatformID()
  651. return self.platformId
  652. end
  653. function SubMod:SetRemoteVersion(remoteVer)
  654. self.remoteVer = remoteVer
  655. end
  656. function SubMod:GetRemoteVersion()
  657. return self.remoteVer
  658. end
  659. -------------------------------------------------------------
  660. -- module
  661. function Module:ctor( id, name, version, suffix, info, subMod, Sign, refer)
  662. self.id = id or ""
  663. self.name = name or ""
  664. self.version = version or global.VersionName.default
  665. self.suffix = suffix
  666. self.modInfo = info
  667. self.refer = refer
  668. self.originVer = ""
  669. self.cacheVer = ""
  670. self.remoteVer = ""
  671. --
  672. self.currentSubMod = nil
  673. self.subMods = {}
  674. if subMod then
  675. for i, v in ipairs(subMod) do
  676. self.subMods[i] = SubMod.new(v, v.id, v.name, v.operid, Sign, v.xk, v.platformId)
  677. end
  678. end
  679. end
  680. function Module:GetID()
  681. return self.id
  682. end
  683. function Module:GetName()
  684. return self.name
  685. end
  686. function Module:GetModInfo()
  687. return self.modInfo
  688. end
  689. function Module:GetRefer()
  690. return self.refer
  691. end
  692. function Module:SetVersion( version )
  693. self.version = version
  694. end
  695. function Module:GetVersion()
  696. return self.version
  697. end
  698. function Module:IsStab()
  699. return self.version == global.VersionName.stab
  700. end
  701. function Module:IsBeta()
  702. return self.version == global.VersionName.beta
  703. end
  704. function Module:IsAlpha()
  705. return self.version == global.VersionName.alpha
  706. end
  707. function Module:GetSuffix()
  708. return self.suffix
  709. end
  710. function Module:GetReferSubModID()
  711. return self.modInfo.refer
  712. end
  713. function Module:GetSubMods()
  714. return self.subMods
  715. end
  716. function Module:GetSubModByID(id)
  717. for _, subMod in pairs(self.subMods) do
  718. if subMod:GetID() == id then
  719. return subMod
  720. end
  721. end
  722. return nil
  723. end
  724. function Module:RegisterSubMod(subModID)
  725. local subMod = self:GetSubModByID(subModID)
  726. if not subMod then
  727. releasePrint("can't find subMod, by RegisterSubMod", subModID)
  728. return false
  729. end
  730. -- set current submod
  731. self.currentSubMod = subMod
  732. return true
  733. end
  734. function Module:GetCurrentSubMod()
  735. return self.currentSubMod
  736. end
  737. function Module:GetOperID()
  738. return self.currentSubMod:GetOperID()
  739. end
  740. function Module:GetGameEnv()
  741. return self.currentSubMod:GetGameEnv()
  742. end
  743. -- 模块可写根路径(writable_path/mod_xxxx/)
  744. function Module:GetRootWritablePath()
  745. return string.format( "%s%s/", cc.FileUtils:getInstance():getWritablePath(), getNewFoldername(tostring(self.id)) )
  746. end
  747. -- 模块 当前版本 访问路径(mod_xxxx/beta/suffix/ mod_xxxx/beta/)
  748. function Module:GetPath()
  749. local basePath = string.format( "%s/%s/", getNewFoldername(tostring(self.id)), getNewFoldername(tostring(self.version)) )
  750. local newPath = self.suffix and string.format( "%s/%s/", basePath, tostring(self.suffix) ) or basePath
  751. return newPath
  752. end
  753. -- 模块 stab 访问路径(mod_launcher/stab/suffix/)
  754. function Module:GetStabPath()
  755. local basePath = string.format( "%s/%s/", getNewFoldername(tostring(self.id)), getNewFoldername(global.VersionName.stab) )
  756. local newPath = self.suffix and string.format( "%s/%s/", basePath, tostring(self.suffix) ) or basePath
  757. return newPath
  758. end
  759. -- 模块 beta 访问路径(mod_xxxx/beta/suffix/ mod_xxxx/beta/)
  760. function Module:GetBetaPath()
  761. local basePath = string.format( "%s/%s/", getNewFoldername(tostring(self.id)), getNewFoldername(global.VersionName.beta) )
  762. local newPath = self.suffix and string.format( "%s/%s/", basePath, tostring(self.suffix) ) or basePath
  763. return newPath
  764. end
  765. -- 模块 stab 访问路径(mod_xxxx/subMod/)
  766. function Module:GetSubModPath()
  767. local subMod = self:GetCurrentSubMod()
  768. if not subMod then
  769. releasePrint("can't find subMod")
  770. return self:GetStabPath()
  771. end
  772. return string.format( "%s/%s/", getNewFoldername(tostring(self.id)), getNewFoldername(subMod:GetID()) )
  773. end
  774. -- 模块 当前版本 远端访问路径(remote_path/mod_launcher/channel/beta/suffix/)
  775. function Module:GetRemotePath( channel )
  776. if not channel or channel == "" then
  777. channel = DefaultVersionChannel
  778. end
  779. if self.suffix then
  780. return string.format( "%s/%s/%s/%s/", tostring(self.id), channel, tostring(self.version), tostring(self.suffix) )
  781. else
  782. return string.format( "%s/%s/%s/", tostring(self.id), channel, tostring(self.version) )
  783. end
  784. end
  785. -- 模块 stab 远端访问路径(remote_path/mod_launcher/channel/stab/suffix/)
  786. function Module:GetRemoteStabPath( channel )
  787. if not channel or channel == "" then
  788. channel = DefaultVersionChannel
  789. end
  790. if self.suffix then
  791. return string.format( "%s/%s/%s/%s/", tostring(self.id), channel, global.VersionName.stab, tostring(self.suffix) )
  792. else
  793. return string.format( "%s/%s/%s/", tostring(self.id), channel, global.VersionName.stab )
  794. end
  795. end
  796. function Module:GetVersionFileName()
  797. return string.format( "%s_%s", tostring(self.id), "version.manifest" )
  798. end
  799. function Module:GetManifestFileName()
  800. return string.format( "%s_%s", tostring(self.id), "project.manifest" )
  801. end
  802. function Module:GetOriginVersion()
  803. if "" ~= self.originVer then
  804. return self.originVer
  805. end
  806. local OriginVersionPath = string.format( "%s%s", self:GetPath(), self:GetVersionFileName())
  807. if global.FileUtilCtl:isFileExist( OriginVersionPath ) then
  808. local strBuffer = global.FileUtilCtl:getDataFromFileEx( OriginVersionPath )
  809. local jsonData = cjson.decode(strBuffer)
  810. if jsonData then
  811. self.originVer = jsonData.version
  812. end
  813. end
  814. if "" == self.originVer then
  815. self.originVer = "0.0.0"
  816. end
  817. return self.originVer
  818. end
  819. function Module:GetCacheVersion()
  820. if "" ~= self.cacheVer then
  821. return self.cacheVer
  822. end
  823. local cacheVersionFile = self:GetManifestFileName()
  824. local writePath = global.FileUtilCtl:getWritablePath()
  825. local modulePath = self:GetPath()
  826. local cacheVersionPath = string.format( "%s%s%s", writePath, tostring( modulePath ), cacheVersionFile )
  827. if global.FileUtilCtl:isFileExist( cacheVersionPath ) then
  828. local strBuffer = global.FileUtilCtl:getDataFromFileEx( cacheVersionPath )
  829. local jsonData = cjson.decode(strBuffer)
  830. if jsonData then
  831. self.cacheVer = jsonData.version
  832. end
  833. end
  834. if "" == self.cacheVer then
  835. self.cacheVer = "0.0.0"
  836. end
  837. return self.cacheVer
  838. end
  839. function Module:SetRemoteVersion( ver )
  840. self.remoteVer = ver
  841. end
  842. function Module:GetRemoteVersion()
  843. return self.remoteVer
  844. end
  845. function Module:GetAllVersionForDisplay()
  846. return string.format("%s/%s/%s", tostring(self:GetOriginVersion()), tostring(self:GetCacheVersion()), tostring(self:GetRemoteVersion()))
  847. end
  848. return Module