package { import com.greensock.plugins.EndArrayPlugin; import com.greensock.plugins.FramePlugin; import com.greensock.plugins.TransformAroundCenterPlugin; import com.greensock.plugins.TweenPlugin; import com.yy.vip.pk.base.components.MyAlert; import com.yy.vip.pk.effect.service.GiftService; import com.yy.vip.pk.service.AppService; import com.yy.vip.pk.service.BaseService; import com.yy.vip.pk.service.JsService; import com.yy.vip.pk.util.JSONUtil; import com.yy.vip.pk.util.Tracer; import com.yy.vip.pk.view.AppView; import com.yy.vip.pk.view.module.entereffect.EnterEffectUtil; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.SecurityErrorEvent; import flash.external.ExternalInterface; import flash.net.LocalConnection; import flash.net.URLLoader; import flash.net.URLRequest; import flash.system.Capabilities; import flash.system.Security; import flash.utils.clearInterval; import flash.utils.getTimer; import flash.utils.setInterval; import org.flexlite.domCore.Injector; import org.flexlite.domUI.components.Alert; import org.flexlite.domUI.core.Theme; import org.flexlite.domUI.events.CloseEvent; import org.flexlite.domUI.managers.SystemManager; import org.flexlite.domUI.skins.themes.VectorTheme; [SWF(frameRate="20")] public class main extends Sprite { private var appView:AppView; private var _configXML:Object; private var _commonXML:Object; private var _giftXML:Object; private var _enterXML:Object; public function main() { super(); Security.allowDomain('*'); Security.allowInsecureDomain("*"); if(stage) { initStage(); } else { addEventListener(Event.ADDED_TO_STAGE,initStage); } } public function get enterXML():Object { return _enterXML; } public function set enterXML(value:Object):void { _enterXML = value; BaseService.getInstance().enterXML = _enterXML; _enterXMLFlag = true; this.commit(); } public function get giftXML():Object { return _giftXML; } public function set giftXML(value:Object):void { _giftXML = value; BaseService.getInstance().giftXML = _giftXML; _giftXMLFlag = true; this.commit(); } public function get configXML():Object { return _configXML; } public function set configXML(value:Object):void { _configXML = value; BaseService.getInstance().configXML = value; _configFlag = true; this.commit(); } public function get commonXML():Object { return _commonXML; } public function set commonXML(value:Object):void { _commonXML = value; BaseService.getInstance().commonXML = value; BaseService.getInstance().bgXML = value.bgs; _commonConfigFlag = true; this.commit(); } private function commit():void { if(_enterXMLFlag && _giftXMLFlag && _configFlag && _initStageFlag && _commonConfigFlag) { BaseService.getInstance().registAppService( 1,AppService.getInstance()); GiftService.getInstance().initConfig(); BaseService.getInstance().initCommon(); EnterEffectUtil.initEnterEffect(); initApp(); } } private function initStage(event:Event = null):void { BaseService.getInstance().stage = stage; var localDomainLC:LocalConnection = new LocalConnection(); var domainName :String= localDomainLC.domain; BaseService.getInstance().domainName = domainName; TweenPlugin.activate([TransformAroundCenterPlugin]); TweenPlugin.activate([FramePlugin]); TweenPlugin.activate([EndArrayPlugin]); Injector.mapClass(Theme,VectorTheme); removeEventListener(Event.ADDED_TO_STAGE,initStage); stage.addEventListener(Event.RESIZE,resizeHandler); stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; _initStageFlag = true; this.commit(); } private var _w:Number; private var _h:Number; private var _configFlag:Boolean; private var _initStageFlag:Boolean; private var _enterXMLFlag:Boolean; private var _giftXMLFlag:Boolean; private var _commonConfigFlag:Boolean; public function initApp():void{ Tracer.debugLog("Capabilities.os : " + Capabilities.os,Tracer.SYS_LOG,true); Tracer.debugLog("PKCONFIG::MODE : " + PKCONFIG::MODE,Tracer.SYS_LOG,true); BaseService.getInstance().PKCONFIG_MODE = PKCONFIG::MODE; appView = new AppView(); addChild(appView); var sm :SystemManager = new SystemManager(); addChild(sm); checkSize(); //checkUpdateVer(); try{ ExternalInterface.call("mainLoadComplete"); } catch(e:Error) { } } private var curReleaseVer:String; private var tchannelLoader:URLLoader; private function checkUpdateVer():void { if(!tchannelLoader) { tchannelLoader = new URLLoader(); tchannelLoader.addEventListener(Event.COMPLETE,loadPubVerHandler); tchannelLoader.addEventListener(IOErrorEvent.IO_ERROR,loadPubVerErrorHandler); tchannelLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,loadPubVerErrorHandler); } tchannelLoader.load(new URLRequest("http://show.vip.yy.com/clientpkgame/config_tchannel.txt?t="+getTimer())); } protected function loadPubVerErrorHandler(event:Event):void { clearInterval(_checkforceUpdateVerIt); } protected function loadPubVerHandler(event:Event):void { var urlLoader:URLLoader = event.currentTarget as URLLoader; var str : String = urlLoader.data; var curVer:String; var forceupdate:uint; if(str) { var data:Object = JSONUtil.decode(str); forceupdate = data.forceupdate; if((!data.tests || data.tests.length == 0) && data.local == false) { curVer = data.release;//全量版本 + 线上的才会有强制升级功能 } } if(curVer)//全量版本才会有强制升级功能 { if(!isStartCheckForceUpdateVer) { curReleaseVer = data.release; if(curReleaseVer) { _checkforceUpdateVerIt = setInterval(checkForceUpdateVerHandler,1000); } } else { if(curReleaseVer && curReleaseVer != curVer && forceupdate == 1) { clearInterval(_checkforceUpdateVerIt); MyAlert.show("发现新版本,是否现在升级?","提示",function handler(event:CloseEvent):void{ if(event.detail == Alert.FIRST_BUTTON) { JsService.getInstance().reloadPage(); } },"立刻升级","下次"); } } } } private var isStartCheckForceUpdateVer :Boolean = false; private var _checkforceUpdateVerIt :uint; private function checkForceUpdateVerHandler():void { isStartCheckForceUpdateVer = true; checkUpdateVer(); } protected function resizeHandler(event:Event):void { checkSize(); } private function checkSize():void { _w = stage.stageWidth; _h = stage.stageHeight; if(appView) { appView.setSizeWH(_w,_h); } } } }