Beispiel #1
0
        public void DownloadList(IList <string> listFiles, Action <Exception> callback)
        {
            InitDownloader();
            step = DownloadStep.Null;
#if !UNITY_WEBGL
            listDownloader.unzipMethod = unzipMethod;
#endif
            log.Debug("Downloading list files {0}", listFiles.Join(","));
            listDownloader.BeginDownload(Cdn.Path, listFiles, e =>
            {
                if (e == null)
                {
                    Exception ex = null;
                    // merge list files
                    List <string> files = new List <string>();
                    int count           = 0;
                    foreach (string f in listFiles)
                    {
                        Web.noCache.GetBytes(Cdn.ToFullPath(f), b => {
                            count++;
                            if (b != null)
                            {
                                StreamReader r = new StreamReader(new MemoryStream(b));
                                while (!r.EndOfStream)
                                {
                                    string line = r.ReadLine();
                                    //                              #if UNITY_WEBGL
                                    //                              line = PathUtil.ReplaceExtension(line, FileTypeEx.ASSET_BUNDLE);
                                    //                              #endif
                                    files.Add(line);
                                }
                            }
                            else
                            {
                                ex = new Exception(f);
                            }
                            if (count == listFiles.Count)
                            {
                                if (ex == null)
                                {
                                    DownloadFiles(files, callback);
                                }
                                else
                                {
                                    step = DownloadStep.Canceled;
                                    callback(ex);
                                }
                            }
                        });
                    }
                }
                else
                {
                    step = DownloadStep.Canceled;
                    callback(e);
                }
            });
        }
        public void CreateDownloadStepTest()
        {
            //Arrange
            var mediator = new Mock<IStepMediator>();
            var fileSystem = new Mock<IFileSystem>();
            var tempFileCreator = new Mock<ITempFileManager>();
            var fileWrapper = new Mock<IFileWrapper>();

            //Act
            var pipelineStep = new DownloadStep(mediator.Object, tempFileCreator.Object, fileSystem.Object, fileWrapper.Object);
            
            //Assert
            Assert.IsInstanceOfType(pipelineStep, typeof(PipelineStepBase<GettingEntityStepData>));
            Assert.IsInstanceOfType(pipelineStep, typeof(PipelineStep<GettingEntityStepData>));
            mediator.Verify(m => m.AddDownloadStep(pipelineStep), Times.Once());
        }
Beispiel #3
0
        public void CreateDownloadStepTest()
        {
            //Arrange
            var mediator        = new Mock <IStepMediator>();
            var fileSystem      = new Mock <IFileSystem>();
            var tempFileCreator = new Mock <ITempFileManager>();
            var fileWrapper     = new Mock <IFileWrapper>();

            //Act
            var pipelineStep = new DownloadStep(mediator.Object, tempFileCreator.Object, fileSystem.Object, fileWrapper.Object);

            //Assert
            Assert.IsInstanceOfType(pipelineStep, typeof(PipelineStepBase <GettingEntityStepData>));
            Assert.IsInstanceOfType(pipelineStep, typeof(PipelineStep <GettingEntityStepData>));
            mediator.Verify(m => m.AddDownloadStep(pipelineStep), Times.Once());
        }
Beispiel #4
0
        /// <summary>
        /// Download files by version number
        // 1. if app is launched the very first, use "[version]/filelist_[version].txt"
        // 2. else if client resource version is the same as server's, get "[version]/patch_[version].txt"
        // 3. else use "filelist_[client_version].txt"
        /// </summary>
        /// <param name="resVer">Res ver.</param>
        /// <param name="callback">Callback.</param>
        public void Download(string verStr, Action <Exception> callback)
        {
            log.Debug("Downloading version {0}", verStr);

            step = DownloadStep.Null;

            newResVer = 0;
            if (int.TryParse(verStr.Trim(), out newResVer))
            {
                int    savedResVer    = pref.GetInt(PREF_CDN_RES_VER, 0);
                string savedClientVer = pref.GetString(PREF_CLIENT_RES_VER, string.Empty);
#if !UNITY_WEBGL
                if (savedResVer == 0 && StreamingAssetLoader.version > 0)
                {
                    savedResVer = StreamingAssetLoader.version;
                }
#endif
                if (savedClientVer != BuildConfig.RES_VERSION || savedResVer != newResVer)
                {
                    // 1. if app is launched the very first, use "filelist_[version].txt"
                    // 2. if client resource version is the same as server's, get "patch_[version].txt"
                    // 3. else use "filelist_c[client_version].txt"
#if UNITY_WEBGL
                    DownloadPatch(savedResVer, newResVer, callback);
#else
                    if (savedClientVer == BuildConfig.RES_VERSION && savedResVer != 0)
                    {
                        // download patch list files
                        DownloadPatch(savedResVer, newResVer, callback);
                    }
                    else
                    {
                        DownloadList(string.Format("{0:D3}/filelist_{0:D3}.txt", newResVer), callback);
                    }
#endif
                }
                else
                {
                    step = DownloadStep.Done;
                    callback(null);
                }
            }
            else
            {
                callback(new Exception("No resource version " + verStr));
            }
        }
        public void Initialize()
        {
            _pipelineMediator = new Mock<IStepMediator>();
            _fileSystem = new Mock<IFileSystem>();
            _fileWrapper = new Mock<IFileWrapper>();
            _tempFileCreator = new Mock<ITempFileManager>();
            _tokenSource = new Mock<CancellationTokenSourceWrapper>();
            _encodeData = new Mock<IEncodeData>();

            _pipelineStep = new DownloadStep(_pipelineMediator.Object, _tempFileCreator.Object, _fileSystem.Object, _fileWrapper.Object);

            var stepData = new GettingEntityStepData()
            {
                EncoderState = EncoderState.Completed,
                EncodeData = _encodeData.Object
            };
            _pipelineStep.SetData(stepData);
        }
Beispiel #6
0
        public void Initialize()
        {
            _pipelineMediator = new Mock <IStepMediator>();
            _fileSystem       = new Mock <IFileSystem>();
            _fileWrapper      = new Mock <IFileWrapper>();
            _tempFileCreator  = new Mock <ITempFileManager>();
            _tokenSource      = new Mock <CancellationTokenSourceWrapper>();
            _encodeData       = new Mock <IEncodeData>();

            _pipelineStep = new DownloadStep(_pipelineMediator.Object, _tempFileCreator.Object, _fileSystem.Object, _fileWrapper.Object);

            var stepData = new GettingEntityStepData()
            {
                EncoderState = EncoderState.Completed,
                EncodeData   = _encodeData.Object
            };

            _pipelineStep.SetData(stepData);
        }
Beispiel #7
0
        private void Complete(DownloadStep s)
        {
            SetStep(s);
            Threading.InvokeLater(() =>
                                  {
                                      Cleanup();

                                      if (log.IsLoggable(LogLevel.Log) && filesDownloaded.Count > 0)
                                      {
                                          StringBuilder str = new StringBuilder(1024);
                                          str.Append("ChangeSet\n");
                                          foreach (string path in filesDownloaded)
                                          {
                                              str.Append("\t").Append(path).Append("\n");
                                          }
                                          log.Debug(str.ToString());
                                      }
                                      ActionEx.CallAfterRelease(ref onComplete, GetException());
                                  });
        }
Beispiel #8
0
        private void DownloadFiles(IEnumerable <string> srcList, Action <Exception> callback)
        {
            step = DownloadStep.Downloading;
#if !UNITY_WEBGL
            fileDownloader.unzipMethod = unzipMethod;
#endif
            fileDownloader.BeginDownload(Cdn.Path, srcList, e =>
            {
                if (e == null)
                {
                    step = DownloadStep.Done;
                    pref.SetInt(PREF_CDN_RES_VER, newResVer);
                    pref.SetString(PREF_CLIENT_RES_VER, BuildConfig.RES_VERSION);
                }
                else
                {
                    step = DownloadStep.Canceled;
                }
                callback(e);
            });
        }
Beispiel #9
0
        /// <summary>
        /// Download fileList from rootUrl.
        /// if fileList entry is downloaded once, it doesn't retryed even even if the rootUrl changes when readOnly flag is true
        /// </summary>
        /// <param name="srcListRoot">Source list root.</param>
        /// <param name="fileList">File list.</param>
        /// <param name="callback">Callback.</param>
        /// <param name="retryCount">Retry count.</param>
        public void BeginDownload(string rootUrl, IEnumerable<string> fileList, Action<Exception> callback)
        {
            this.srcRoot = rootUrl;
            step = DownloadStep.Null;
#if UNITY_WEBGL
            if (webGL != null && webGL.IsBusy)
            {
                log.Warn("Download is already begun");
                return;
            }
#else
            if (web != null)
            {
                log.Warn("Download is already begun");
                return;
            }
            DirUtil2.CreateDirectory(GetCacheRoot());
#endif
            onComplete = callback;
            InitTags(fileList);
            SetFiles(fileList, preserveProgress);
            DownloadNext();
        }
Beispiel #10
0
 void OnDisable()
 {
     Cleanup();
     onComplete = null;
     step = DownloadStep.Canceled;
 }