Esempio n. 1
0
    private IEnumerator DoCheckRemoteVersion(Action <List <string> > downloadComplete, Action <int, int, float> downloadProgress, Func <string, bool> filter, bool NoDependeces, params string[] resources)
    {
        yield return(new WaitForEndOfFrame());

        this.downloadComplete = downloadComplete;
        downloading           = true;

        ResetDownloadStatus();

        if (string.IsNullOrEmpty(UStaticFuncs.DownLoadConfigURL))
        {
            Debug.Log("资源下载地址为空");
        }
        else
        {
            Debug.Log("正在检查资源版本");
            downloadingResources = resources.ToList();
            if (!NoDependeces)
            {
                foreach (var r in resources)
                {
                    var files = UAssetBundleDownloader.Instance.OnGetAssetBundleDependeces(r);
                    foreach (var f in files)
                    {
                        if (downloadingResources.Contains(f))
                        {
                            continue;
                        }
                        downloadingResources.Add(f);
                    }
                }
            }
            var downloadedResources = new List <string>();
            if (dFileRemoteVersions.Count == 0)
            {
                var url = UStaticFuncs.DownLoadConfigURL + "versions.txt?-" + ApiDateTime.Now.Ticks;
                if (UStaticFuncs.GetPlatformFolder(Application.platform) == UStaticFuncs.GetPlatformFolder(RuntimePlatform.WindowsPlayer))
                {
                    if (!url.Contains("://"))
                    {
                        url = "file://" + url;
                    }
                }
                WWW www = new WWW(url);
                yield return(www);

                if (string.IsNullOrEmpty(www.error))
                {
                    var text  = www.text;
                    var atext = text.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (var t in atext)
                    {
                        var name = "";
                        var av   = t.Split('|');
                        if (av.Length < 3)
                        {
                            continue;
                        }
                        name = av[0];
                        if (name.StartsWith("/") || name.StartsWith("\\"))
                        {
                            name = name.Substring(1);
                        }
                        name = name.Replace("\\", "/");
                        var filecell = new RemoteFileCell();
                        filecell.version = av[1];
                        filecell.bytes   = typeParser.Int64Parse(av[2]);
                        if (dFileRemoteVersions.ContainsKey(name))
                        {
                            dFileRemoteVersions[name] = filecell;
                        }
                        else
                        {
                            dFileRemoteVersions.Add(name, filecell);
                        }
                    }
                }
                else
                {
                    Debug.Log("检查资源版本失败," + www.error);
                }
            }

            foreach (var rver in dFileRemoteVersions)
            {
                if (filter != null && filter(rver.Key))
                {
                    if (!downloadingResources.Contains(rver.Key))
                    {
                        downloadingResources.Add(rver.Key);
                    }
                    if (!NoDependeces)
                    {
                        var files = OnGetAssetBundleDependeces(rver.Key);
                        foreach (var f in files)
                        {
                            if (downloadingResources.Contains(f))
                            {
                                continue;
                            }
                            downloadingResources.Add(f);
                        }
                    }
                }

                var remove = new List <string>();
                foreach (var n in downloadingResources)
                {
                    if (!dFileRemoteVersions.ContainsKey(n))
                    {
                        remove.Add(n);
                    }
                }
                foreach (var r in remove)
                {
                    downloadingResources.Remove(r);
                }
            }

            foreach (var r in downloadingResources)
            {
                totalBytes += dFileRemoteVersions[r].bytes;
            }

            if (dFileRemoteVersions.Count != 0)
            {
                waitingForDownload = new List <string>();
                waitingForDownload.AddRange(downloadingResources);
                if (downloadingResources.Count == 0)
                {
                    OnDownloadComplete(waitingForDownload);
                }
                else
                {
                    for (var i = 0; i < DownloadHandlerCount && i < downloadingResources.Count; i++)
                    {
                        StartToDownloadResources(downloadComplete, downloadProgress);
                    }
                }
            }
        }
    }
    private IEnumerator DoCheckRemoteVersion(Action <List <string> > downloadComplete, Action <int, int, float> downloadProgress, Func <string, bool> filter, bool NoDependeces, params string[] resources)
    {
        if (string.IsNullOrEmpty(UStaticFuncs.DownLoadConfigURL))
        {
            Debug.Log("资源下载地址为空。");
        }
        else
        {
            Debug.Log("正在检查资源版本");
            var resourcesList = resources.ToList();
            if (!NoDependeces)
            {
                foreach (var r in resources)
                {
                    var files = UAssetBundleDownloader.Instance.OnGetAssetBundleDependeces(r);
                    foreach (var f in files)
                    {
                        if (resourcesList.Contains(f))
                        {
                            continue;
                        }
                        resourcesList.Add(f);
                    }
                }
            }
            var downloadedResources = new List <string>();
            if (dFileRemoteVersions.Count == 0)
            {
                var url = UStaticFuncs.DownLoadConfigURL + "versions.txt?" + ApiDateTime.Now.Ticks;
                if (UStaticFuncs.GetPlatformFolder(Application.platform) == UStaticFuncs.GetPlatformFolder(RuntimePlatform.WindowsPlayer))
                {
                    if (!url.Contains("://"))
                    {
                        url = "file://" + url;
                    }
                }
                www = new WWW(url);
                yield return(www);

                if (string.IsNullOrEmpty(www.error))
                {
                    var text  = www.text;
                    var atext = text.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (var t in atext)
                    {
                        var name = "";
                        var av   = t.Split('|');
                        if (av.Length < 3)
                        {
                            Debug.LogError("remote version file check failed");
                        }
                        name = av[0];
                        if (name.StartsWith("/") || name.StartsWith("\\"))
                        {
                            name = name.Substring(1);
                        }
                        name = name.Replace("\\", "/");
                        var filecell = new RemoteFileCell();
                        filecell.version = av[1];
                        filecell.bytes   = typeParser.Int64Parse(av[2]);
                        if (dFileRemoteVersions.ContainsKey(name))
                        {
                            dFileRemoteVersions[name] = filecell;
                        }
                        else
                        {
                            dFileRemoteVersions.Add(name, filecell);
                        }
                    }
                }
                else
                {
                    Debug.Log("检查资源版本失败," + www.error);
                }
            }

            foreach (var rver in dFileRemoteVersions)
            {
                if (filter != null && filter(rver.Key))
                {
                    if (!resourcesList.Contains(rver.Key))
                    {
                        resourcesList.Add(rver.Key);
                    }
                    if (!NoDependeces)
                    {
                        var files = OnGetAssetBundleDependeces(rver.Key);
                        foreach (var f in files)
                        {
                            if (resourcesList.Contains(f))
                            {
                                continue;
                            }
                            resourcesList.Add(f);
                        }
                    }
                }

                var remove = new List <string>();
                foreach (var n in resourcesList)
                {
                    if (dAssetBundles.ContainsKey(n) ||
                        !dFileRemoteVersions.ContainsKey(n))
                    {
                        remove.Add(n);
                    }
                }
                foreach (var r in remove)
                {
                    resourcesList.Remove(r);
                }
            }

            totalBytes = 0;
            foreach (var r in resourcesList)
            {
                totalBytes += dFileRemoteVersions[r].bytes;
            }

            if (dFileRemoteVersions.Count != 0)
            {
                if (resourcesList.Count == 0)
                {
                    downloadComplete?.Invoke(resourcesList);
                }
                else
                {
                    StartToDownloadResources(downloadComplete, downloadProgress, downloadedResources, resourcesList);

#if UNITY_IOS || UNITY_EDITOR
                    StartCoroutine(DelayUpdateProgress(downloadProgress, downloadedResources, resourcesList));
#endif
                }
            }
        }
    }