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()); }
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()); }
/// <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); }
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); }
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()); }); }
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); }); }
/// <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(); }
void OnDisable() { Cleanup(); onComplete = null; step = DownloadStep.Canceled; }