コード例 #1
0
        /** 计算新的更新包的资源大小 */
        public static void countNewVersionSize(VersionSaveData data, VersionReData re)
        {
            re.size         = 0;
            re.isOnlyConfig = true;

            data.resourceDic.forEachValue(v =>
            {
                ResourceSaveData oldData = _versionData.resourceDic.get(v.name);

                if (oldData != null)
                {
                    //需要下载的部分
                    if (oldData.version < v.version ||
                        (v.state == ResourceSaveStateType.None && ResourceSaveType.needFirst(v.saveType) && oldData.state == ResourceSaveStateType.None))
                    {
                        re.size += v.size;

                        if (re.isOnlyConfig && !v.name.StartsWith(ShineGlobal.configDirPath))
                        {
                            re.isOnlyConfig = false;
                        }
                    }
                }
            });

            if (re.size == 0)
            {
                re.isOnlyConfig = false;
            }
        }
コード例 #2
0
        private static void loadPackVersionOver()
        {
            BytesReadStream stream = _loader.getBytesRead();

            if (stream != null && stream.checkVersion(ShineGlobal.versionInfoVersion))
            {
                _packVersionData = new VersionSaveData();
                _packVersionData.readBytes(stream);
            }

            _loader.unload();

            //初次下载
            if (_versionData == null)
            {
                _versionData = _packVersionData;

                if (_versionData == null)
                {
                    ShineSetup.exit("没有可用的versionInfo数据,请重新打包");
                    return;
                }

                makeVersionFirst();
            }
            //更新app或调试版
            else if (_packVersionData.resourceVersion > _versionData.resourceVersion || !_packVersionData.isRelease)
            {
                if (!ShineSetting.isRelease && ShineSetting.needDebugResourceVersion)
                {
                    //其他动作
                }
                else
                {
                    //新包覆盖
                    if (ShineSetting.newPackNeedCover)
                    {
                        _versionData = _packVersionData;
                        // deleteAllCache();
                        deleteAllPackageCache();
                        makeVersionFirst();
                    }
                    else
                    {
                        mergeVersion(_packVersionData);
                        checkResourceExists();
                    }
                }
            }

            Action func = _overCall;

            _overCall = null;

            if (func != null)
            {
                func();
            }
        }
コード例 #3
0
        /** 与旧版本资源合并(并且删除旧资源) */
        public static void mergeVersion(VersionSaveData data)
        {
            data.resourceDic.forEachValue(v =>
            {
                ResourceSaveData oldData = _versionData.resourceDic.get(v.name);

                if (oldData != null)
                {
                    oldData.dided = true;
                    //版本不足(或调试版)
                    if (oldData.version < v.version || !data.isRelease)
                    {
                        //删除
                        deleteCacheResoruce(oldData.name);
                    }
                    //相同版本
                    else
                    {
                        //且已下载好的
                        if (oldData.state == ResourceSaveStateType.Downloaded)
                        {
                            v.state = ResourceSaveStateType.Downloaded;
                        }
                    }

                    //需要进包的部分
                    if (v.saveType == ResourceSaveType.InStreamingAsset)
                    {
                        ResourceSaveData pData = _packVersionData.resourceDic.get(v.name);

                        //包内资源相同
                        if (pData != null && pData.version == v.version)
                        {
                            v.state = ResourceSaveStateType.StreamingAssetsReady;
                        }
                    }
                }
            });

            _versionData.resourceDic.forEachValue(v =>
            {
                if (!v.dided)
                {
                    //删除
                    deleteCacheResoruce(v.name);
                }

                v.dided = false;
            });

            _versionData     = data;
            _versionModified = true;
        }
コード例 #4
0
        /** 读取本地版本数据(如已存在则不再读取) */
        public static void loadVersion(Action overFunc)
        {
            if (_versionData != null)
            {
                if (overFunc != null)
                {
                    overFunc();
                }
                return;
            }

            _overCall = overFunc;

            BytesReadStream stream = FileUtils.readFileForBytesReadStream(_versionPath);

            //存在
            if (stream != null && stream.checkVersion(ShineGlobal.versionInfoVersion))
            {
                _versionData = new VersionSaveData();
                _versionData.readBytes(stream);

                //本地纠正
                if (!ShineSetting.isRelease)
                {
                    makeVersionFirst();
                }
            }
            else
            {
                _versionData = null;
            }

            if (!ShineSetting.isRelease && ShineSetting.localLoadWithOutBundle)
            {
                if (_versionData == null)
                {
                    _versionData                 = new VersionSaveData();
                    _versionData.appVersion      = 1;
                    _versionData.resourceVersion = 1;
                    _versionData.version         = "1.01";
                }

                if (overFunc != null)
                {
                    overFunc();
                }
                return;
            }

            _loader.setCompleteCall(loadPackVersionOver);
            _loader.loadStreamingAsset(ShineGlobal.versionInfoPath);
        }
コード例 #5
0
        private static void loadCDNVersionOver()
        {
            BytesReadStream stream = _loader.getBytesRead();

            VersionSaveData data = null;

            if (stream != null && stream.checkVersion(ShineGlobal.versionInfoVersion))
            {
                data = new VersionSaveData();
                data.readBytes(stream);
            }

            _loader.unload();

            Action <VersionSaveData> func = _overCall2;

            _overCall2 = null;

            if (func != null)
            {
                func(data);
            }
        }