Пример #1
0
    void TryGetRemoteURLConfig(WWW www)
    {
        var urlConfigContent = www.text;

        remoteOption_ = Frame.JsonSeriazlier.From <Frame.RemoteRootOption>(urlConfigContent);
        Debug.Log("URLConfig:" + www.text);
        if (Success(remoteOption_ != null && remoteOption_.CurrentVersion().main > 0, LoadingError.RemoteURLConfigLoadFailedOrEmpty))
        {
            mRemoteABFloderURL  = Frame.Helper.CombineWithSlash(false, remoteOption_.cdn, GetPlatformString(), Frame.FrameOption.Files.abFloder);
            mRemoteIndexFileURL = Frame.Helper.CombineWithSlash(false, remoteOption_.cdn, GetPlatformString(), Frame.FrameOption.Files.cdnIndexFile);
            //mRemoteVersionFile = Frame.Helper.CombineWithSlash(false, remoteOption_.cdn, GetPlatformString(), Frame.FrameOption.Files.cdnVersionFile);

            if (!Directory.Exists(Frame.FrameOption.Files.sdABFloder))
            {
                Directory.CreateDirectory(Frame.FrameOption.Files.sdABFloder);
            }
        }
    }
Пример #2
0
        protected override IEnumerator OnStart()
        {
            this.SetTargetState((int)UpdateState.Sucess);
            {
                var procedure = new WaitForNetProcedure();
                procedure.name = "检测网络";
                AddProcedure(UpdateState.None, UpdateState.WaitForNet, procedure);
            }

            {
                var procedure = new DownLoadFileProcedure();
                procedure.name           = "检测网络成功,读取streaming信息";
                procedure.getURL         = () => GameOption.FilePath.GetStreamFile(FrameOption.ResourceConfigFileType.ResourceIndex);
                procedure.contentHandler = (reponse) => {
                    indexStreaming_ = JsonSeriazlier.From <AssetBundleIndex>(reponse.text, Frame.FrameOption.Files.abIndexCompressed);
                };
                procedure.callback = ReadSDIndex;
                AddProcedure(UpdateState.WaitForNet, UpdateState.ReadStreaming, procedure);
            }

            {
#if UNITY_EDITOR
                var procedure = new Procedure();
                procedure.name     = "Editor Procedure";
                procedure.canStart = () => !indexStreaming_;
                AddProcedure(UpdateState.ReadStreaming, UpdateState.Sucess, procedure);
#endif
            }

            {
                var procedure = new DownloadFilesProcedure();
                procedure.getURLs        = () => GetStreamABURLs();
                procedure.name           = "ExportToSD";
                procedure.canStart       = () => !indexSD_ || (indexStreaming_ && indexStreaming_.version.HigherThan(indexSD_.version));
                procedure.contentHandler = SaveFileToSD;
                procedure.callback       = SaveStreamingInfoToSD;
                AddProcedure(UpdateState.ReadStreaming, UpdateState.ExportToSD, procedure);
            }
            {
                var procedure = new DownloadRemoteRootOptionProcedure();
                procedure.name           = "下载远程配置";
                procedure.getURL         = () => GameOption.Flow.RemoteRootConfigFile;
                procedure.contentHandler = (reponse) => remoteOption_ = JsonSeriazlier.From <RemoteRootOption>(reponse.text);
                procedure.canStart       = () => indexSD_ && !indexStreaming_.version.HigherThan(indexSD_.version);
                procedure.callback       = () => {
                    this.remoteRootOptionChecked_ = true;
                };
                AddProcedure(UpdateState.ReadStreaming, UpdateState.ReadRemoteConfig, procedure);
            }

            {
                var procedure = new DownloadRemoteRootOptionProcedure();
                procedure.name           = "下载远程配置";
                procedure.getURL         = () => GameOption.Flow.RemoteRootConfigFile;
                procedure.contentHandler = (reponse) => remoteOption_ = JsonSeriazlier.From <RemoteRootOption>(reponse.text);
                procedure.canStart       = () => indexSD_ && !indexStreaming_.version.HigherThan(indexSD_.version);
                procedure.callback       = () => {
                    this.remoteRootOptionChecked_ = true;
                };
                AddProcedure(UpdateState.ExportToSD, UpdateState.ReadRemoteConfig, procedure);
            }

            {
                var procedure = new DownLoadPackage();
                procedure.name     = "下载新版本";
                procedure.canStart = () => remoteOption_ &&
                                     !string.IsNullOrEmpty(remoteOption_.cdn) &&
                                     remoteOption_.CurrentVersion().ProgramHigherThan(indexStreaming_.version)
                ;
                procedure.queryState = () => ProduceState.Running;
                AddProcedure(UpdateState.ReadRemoteConfig, UpdateState.DownloadPackage, procedure);
            }

            {
                var procedure = new DownLoadFileProcedure();
                procedure.name           = "ReadRemoteIndex";
                procedure.canStart       = () => remoteOption_ && remoteOption_.CurrentVersion().HigherThan(indexSD_.version);
                procedure.contentHandler = (reponse) => indexRemote_ = JsonSeriazlier.From <AssetBundleIndex>(reponse.text);
                AddProcedure(UpdateState.ReadRemoteConfig, UpdateState.ReadRemoteIndex, procedure);
            }

            {
                //读取远程版本信息后,如果资源版本较高,如果不允许直接下载就检测Wifi
                var procedure = new WaitForWifiProcedure();
                procedure.name     = "检测Wifi";
                procedure.canStart = () => !FrameOption.Base.allowDownloadWithoutWifi && indexRemote_.version && indexRemote_.version.ResourceHigherThan(indexSD_.version);
                AddProcedure(UpdateState.ReadRemoteIndex, UpdateState.CheckWifi, procedure);
            }

            {
                //读取远程版本信息后,如果资源版本较高,如果允许直接下载DownloadIncrements
                var procedure = new DownloadFilesProcedure();
                procedure.name           = "DownloadIncrements";
                procedure.getURLs        = GetIncrementABUrls;
                procedure.contentHandler = SaveFileToSD;
                procedure.canStart       = () => FrameOption.Base.allowDownloadWithoutWifi && remoteOption_ && remoteOption_.CurrentVersion().ResourceHigherThan(indexSD_.version);
                AddProcedure(UpdateState.ReadRemoteIndex, UpdateState.DownloadIncrements, procedure);
            }

            {
                var procedure = new Procedure();
                procedure.name     = "Sucess";
                procedure.canStart = () => remoteRootOptionChecked_ &&
                                     (!indexRemote_ || indexRemote_.version.Equals(indexSD_.version))
                ;
                AddProcedure(UpdateState.ReadRemoteConfig, UpdateState.Sucess, procedure);
            }

            {
                var procedure = new DownloadFilesProcedure();
                procedure.name           = "DownloadIncrements";
                procedure.getURLs        = GetIncrementABUrls;
                procedure.contentHandler = SaveFileToSD;
                procedure.canStart       = () => FrameOption.Base.allowDownloadWithoutWifi || Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork;
                AddProcedure(UpdateState.CheckWifi, UpdateState.DownloadIncrements, procedure);
            }

            {
                //检测Wifi成功,下载更新
                var procedure = new Procedure();
                procedure.name = "UpdateState.Sucess";
                AddProcedure(UpdateState.DownloadIncrements, UpdateState.Sucess, procedure);
            }
            yield return(null);
        }