RestartGameCommand.lua 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. local RestartGameCommand = class('RestartGameCommand', framework.SimpleCommand)
  2. function RestartGameCommand:ctor()
  3. end
  4. function RestartGameCommand:execute(note)
  5. --debug
  6. release_print( "RestartGameCommand" )
  7. --clean lua callfunc
  8. if global.sceneManager then
  9. global.sceneManager:Cleanup()
  10. end
  11. --语音通知退出
  12. local VoiceManagerProxy = global.Facade:retrieveProxy( global.ProxyTable.VoiceManagerProxy )
  13. if VoiceManagerProxy then
  14. VoiceManagerProxy:VoiceExit()
  15. end
  16. -- 数据上报 游戏时长
  17. local DataRePortProxy = global.Facade:retrieveProxy( global.ProxyTable.DataRePortProxy )
  18. DataRePortProxy:PlayGame()
  19. -- clear msg handler
  20. global.LuaBridgeCtl:SetModulesSwitch( global.MMO.Modules_Index_Enable_Disconnect_Msg, 0 )
  21. LuaNetworkController:Inst():UnregisterAllLuaHandler()
  22. local aNetclient = gameEnviroment:Inst():GetNetClient()
  23. if aNetclient then
  24. aNetclient:Disconnect()
  25. aNetclient:CleanAllMessageHandler()
  26. end
  27. -- clean
  28. global.ResDownloader:Cleanup()
  29. -- release sui caches
  30. global.SWidgetCache:releaseAll()
  31. -- auth cache
  32. local AuthProxy = global.Facade:retrieveProxy(global.ProxyTable.AuthProxy)
  33. AuthProxy:SaveLocalCache()
  34. AuthProxy:releaseDownloader()
  35. local OtherTradingBankProxy = global.Facade:retrieveProxy(global.ProxyTable.OtherTradingBankProxy)
  36. OtherTradingBankProxy:setGameToken("")--清理token
  37. OtherTradingBankProxy:LoginOut()--登出交易行
  38. if global.OtherTradingBankH5 then --隐藏取回
  39. local loginProxy = global.Facade:retrieveProxy(global.ProxyTable.Login)
  40. local roleData = loginProxy:GetRoles()
  41. local lock = false
  42. for i, v in ipairs(roleData) do
  43. if v.LockChar and (v.LockChar == 1 or v.LockChar == 3) then
  44. lock = true
  45. break
  46. end
  47. end
  48. if lock then
  49. OtherTradingBankProxy:dismissBackToView()
  50. end
  51. end
  52. global.Facade:sendNotification( global.NoticeTable.EndGameState )
  53. -- cleanup anim mgr
  54. global.FrameAnimManager:Cleanup()
  55. -- cleanup user data
  56. UserData:Cleanup()
  57. UserData:setVersionPath("")
  58. local director = cc.Director:getInstance()
  59. local texCache = director:getTextureCache()
  60. local spriteFrameCache = cc.SpriteFrameCache:getInstance()
  61. spriteFrameCache:removeSpriteFrames()
  62. texCache:removeAllTextures()
  63. -- clearAsyncCallback
  64. texCache:unbindAllImageAsync()
  65. -- clear cocos2d cache, issue: release res maybe crash.
  66. director:purgeCachedData()
  67. -- clear cocos2d event
  68. director:getEventDispatcher():removeAllEventListeners()
  69. -- clear cocos2d scheduler, but system scheduler( ActionManager )
  70. director:getScheduler():unscheduleAllWithMinPriority( cc.PRIORITY_NON_SYSTEM_MIN )
  71. -- clear cocos2d action
  72. director:getActionManager():removeAllActions()
  73. -- stop spriteframe async load task
  74. cc.AsyncTaskPool:getInstance():stopTasks(cc.AsyncTaskPool.TaskType.TASK_IO)
  75. cc.AsyncTaskPool:getInstance():stopTasks(cc.AsyncTaskPool.TaskType.TASK_NETWORK)
  76. -- clear cocos2d audio
  77. cc.SimpleAudioEngine:destroyInstance()
  78. ccexp.AudioEngine:uncacheAll()
  79. -- ccexp.AudioEngine:endToLua()
  80. -- reset downloader
  81. global.HttpDownloader:reset()
  82. -- ssr bridge
  83. ssr.ssrBridge:onRestartGame()
  84. -- spine batch
  85. if sp and sp.SkeletonBatch then
  86. sp.SkeletonBatch:destory()
  87. end
  88. -- record log
  89. local platform = cc.Application:getInstance():getTargetPlatform()
  90. if platform == cc.PLATFORM_OS_WINDOWS then
  91. -- nothing todo
  92. elseif platform == cc.PLATFORM_OS_ANDROID then
  93. if nil ~= note:getBody() then
  94. local cjson = require("cjson")
  95. local jData = {}
  96. jData.restartMode = note:getBody()
  97. global.L_NativeBridgeManager:GN_restartGame(jData)
  98. else
  99. buglyLog( 0, "restart game", "Restart Lua VM!" )
  100. end
  101. end
  102. releasePrint( "RestartGameCommand completed" )
  103. releasePrint( "Restart Lua VM!" )
  104. -- restart luaVM
  105. LuaBridgeCtl:Inst():CreateNewState()
  106. -- end check game server heart beat
  107. global.LuaBridgeCtl:SetModulesSwitch( global.MMO.Modules_Index_Enable_Check_Heart_Beat, 0 )
  108. end
  109. return RestartGameCommand