示例#1
0
            public void Run(AssetIndexRemoteFileInfo remoteIndexFileInfo, UpdateCheckCallbackSet callbackSet,
                            object context)
            {
                if (Status != UpdateCheckerStatus.None)
                {
                    throw new InvalidOperationException("Update checking already run.");
                }

                Status = UpdateCheckerStatus.Running;

                m_CallbackSet = callbackSet;
                m_Context     = context;

                if (!m_Owner.UpdateIsEnabled)
                {
                    UseInstallerResourcesOnly();
                    return;
                }

                m_RemoteIndexFileInfo = remoteIndexFileInfo ??
                                        throw new InvalidOperationException("Remote index file info is invalid.");

                if (RootUrls.Count <= 0)
                {
                    ResetStatus();
                    throw new InvalidOperationException("Root URL for any update server hasn't been set.");
                }

                if (!m_RootUrlsModified)
                {
                    m_RootUrlsModified = true;
                    for (int i = 0; i < RootUrls.Count; i++)
                    {
                        RootUrls[i] = new Uri(RootUrls[i], Utility.Text.Format(m_Owner.UpdateRelativePathFormat,
                                                                               m_Owner.RunningPlatform,
                                                                               Utility.Text.Format("{0}.{1}", m_Owner.BundleVersion,
                                                                                                   m_RemoteIndexFileInfo.InternalAssetVersion)));
                    }
                }

                if (!CheckNeedDownloadRemoteIndex(remoteIndexFileInfo))
                {
                    CheckUpdate();
                    return;
                }

                m_DownloadRetryTimes = 0;
                m_DownloadTaskInfo   = new DownloadTaskInfo(
                    Utility.Text.Format("{0}/index_{1}.dat", RootUrls[m_RootUrlIndex].ToString(),
                                        m_RemoteIndexFileInfo.Crc32.ToString()),
                    m_Owner.CachedRemoteIndexPath, m_RemoteIndexFileInfo.FileSize, m_RemoteIndexFileInfo.Crc32,
                    new DownloadCallbackSet
                {
                    OnSuccess  = m_OnDownloadSuccess,
                    OnFailure  = m_OnDownloadFailure,
                    OnProgress = null,
                }, null);
                m_Owner.DownloadService.StartDownloading(m_DownloadTaskInfo);
            }
            private void UseInstallerResourcesOnly()
            {
                if (!m_Owner.TryCleanUpReadWritePathOrFail(Fail))
                {
                    return;
                }

                ReadWriteIndex.AssetInfos.Clear();
                ReadWriteIndex.ResourceInfos.Clear();
                ReadWriteIndex.ResourceGroupInfos.Clear();
                ReadWriteIndex.ResourceBasicInfos.Clear();

                foreach (var resourceGroupInfo in InstallerIndex.ResourceGroupInfos)
                {
                    ReadWriteIndex.ResourceGroupInfos.Add(resourceGroupInfo);
                    ResourceSummaries.Add(resourceGroupInfo.GroupId, new ResourceGroupUpdateSummary());
                }

                foreach (var kv in InstallerIndex.AssetInfos)
                {
                    ReadWriteIndex.AssetInfos.Add(kv.Key, kv.Value);
                }

                foreach (var kv in InstallerIndex.ResourceBasicInfos)
                {
                    ReadWriteIndex.ResourceBasicInfos.Add(kv.Key, kv.Value);
                }

                if (!m_Owner.TrySaveReadWriteIndexOrFail(Fail))
                {
                    return;
                }

                Status = UpdateCheckerStatus.Success;
                m_CallbackSet.OnSuccess?.Invoke(m_Context);
            }
 private void Succeed()
 {
     Status = UpdateCheckerStatus.Success;
     m_CallbackSet.OnSuccess?.Invoke(m_Context);
 }
 private void ResetStatus()
 {
     Status               = UpdateCheckerStatus.None;
     m_RootUrlIndex       = 0;
     m_DownloadRetryTimes = 0;
 }