public void StartWork(WorkerParams argument) { if (!this.IsBusy) { this.token = argument; if (!myPSO2filesList.IsEmpty) { this.bWorker.RunWorkerAsync(); /*ExtendedBackgroundWorker asdasd; * asdasd = this._bwList.GetRestingWorker(); * if (asdasd != null && !asdasd.IsBusy) * asdasd.RunWorkerAsync(); * while (this._bwList.GetNumberOfRunning() < this._bwList.MaxCount) * { * asdasd = this._bwList.GetRestingWorker(); * if (asdasd != null && !asdasd.IsBusy) * asdasd.RunWorkerAsync(); * }//*/ } } }
private void BWorker_DoWork(object sender, DoWorkEventArgs e) { this.OnProgressStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.Infinite)); WorkerParams wp = e.Argument as WorkerParams; string pso2Path = wp.PSO2Path; // Check if there is any prepatch files if (!wp.IgnorePrepatch) { string prepatchFolderData = Path.Combine(pso2Path, PrepatchManager.PrepatchManager.PrepatchFolderName, "data"); if (!DirectoryHelper.IsFolderEmpty(prepatchFolderData)) { // Ignore prepatch files if it's older than the current client version PSO2Version currentVersion = PSO2Version.Parse(MySettings.PSO2Version); PSO2Version prepatchVersion = PSO2Version.Parse(MySettings.PSO2PrecedeVersion.Version); if (prepatchVersion.CompareTo(currentVersion) > 0) { this.CurrentStep = LanguageManager.GetMessageText("PSO2Updater_FoundValidPrepatch", "Found prepatch files which are ready to be used."); ValidPrepatchPromptEventArgs myEventArgs = new ValidPrepatchPromptEventArgs(); this.OnValidPrepatchPrompt(myEventArgs); if (myEventArgs.Use) { string[] filenames = Directory.GetFiles(prepatchFolderData, "*", SearchOption.AllDirectories); this.CurrentStep = LanguageManager.GetMessageText("PSO2Updater_MovingPrepatchFiles", "Applying prepatch files."); this.ProgressTotal = filenames.Length; this.OnProgressStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.Percent)); string str = null, maindatafolder = Path.Combine(pso2Path, "data"), targetfile = null; for (int i = 0; i < filenames.Length; i++) { str = filenames[i]; targetfile = maindatafolder + str.Remove(0, prepatchFolderData.Length); File.Delete(targetfile); File.Move(str, targetfile); this.ProgressCurrent = i + 1; } // Check if it's empty again to remove it if (DirectoryHelper.IsFolderEmpty(prepatchFolderData)) { string prepatchfolder = Path.Combine(pso2Path, PrepatchManager.PrepatchManager.PrepatchFolderName); try { Directory.Delete(prepatchfolder, true); } catch { } } } } else { this.CurrentStep = LanguageManager.GetMessageText("PSO2Updater_FoundInvalidPrepatch", "Found out-dated prepatch files which will be ignored. These files shouldn't be used and should be deleted."); InvalidPrepatchPromptEventArgs myEventArgs = new InvalidPrepatchPromptEventArgs(); this.OnInvalidPrepatchPrompt(myEventArgs); if (myEventArgs.Delete) { this.CurrentStep = LanguageManager.GetMessageText("PSO2Updater_DeletingInvalidPrepatch", "Deleting out-dated prepatch files."); string prepatchfolder = Path.Combine(pso2Path, PrepatchManager.PrepatchManager.PrepatchFolderName); try { Directory.Delete(prepatchfolder, true); } catch { } } } } } this.OnProgressStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.Infinite)); var patchinfo = this.CheckForUpdates(); if (this.GetFilesList(patchinfo)) { System.Collections.Concurrent.ConcurrentDictionary <string, PSO2File> myPSO2filesList = ParseFilelist(this.myFileList, patchinfo); if (!myPSO2filesList.IsEmpty) { this.ProgressTotal = myPSO2filesList.Count; this.OnProgressStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.Percent, new Forms.MyMainMenuCode.CircleProgressBarProperties(true))); string verstring = wp.NewVersionString; if (string.IsNullOrWhiteSpace(verstring)) { verstring = this.myWebClient.DownloadString(Leayal.UriHelper.URLConcat(patchinfo.PatchURL, "version.ver")); } if (!string.IsNullOrWhiteSpace(verstring)) { verstring = verstring.Trim(); } anothersmallthreadpool = new AnotherSmallThreadPool(pso2Path, myPSO2filesList); anothersmallthreadpool.StepChanged += Anothersmallthreadpool_StepChanged; anothersmallthreadpool.ProgressChanged += Anothersmallthreadpool_ProgressChanged; anothersmallthreadpool.KaboomFinished += Anothersmallthreadpool_KaboomFinished; this.CurrentStep = LanguageManager.GetMessageText("PSO2Updater_BeginFileCheckAndDownload", "Begin the file check and download..."); anothersmallthreadpool.StartWork(new WorkerParams(pso2Path, verstring, wp.Installation, wp.IgnorePrepatch)); e.Result = null; } else { e.Result = new PSO2UpdateResult(UpdateResult.Failed); } } else { e.Result = new PSO2UpdateResult(UpdateResult.Unknown); throw new PSO2UpdateException(LanguageManager.GetMessageText("PSO2UpdateManager_GetPatchListFailed", "Failed to get PSO2's file list.")); } }
private void Anothersmallthreadpool_KaboomFinished(object sender, KaboomFinishedEventArgs e) { this.OnProgressStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.None)); if (e.Error != null) { this.OnHandledException(e.Error); } else { LogManager.GeneralLog.Print(PSO2UpdateResult.GetMsg(e.Result, e.FailedList == null ? 0 : e.FailedList.Count), LogLevel.Info); switch (e.Result) { case UpdateResult.Cancelled: if (e.UserToken != null && e.UserToken is WorkerParams) { WorkerParams wp = e.UserToken as WorkerParams; if (wp.Installation) { this.OnPSO2Installed(new PSO2NotifyEventArgs(true, wp.PSO2Path, e.FailedList)); } else { this.OnPSO2Installed(new PSO2NotifyEventArgs(true, false, e.FailedList)); } } break; case UpdateResult.Failed: if (e.UserToken != null && e.UserToken is WorkerParams) { WorkerParams wp = e.UserToken as WorkerParams; if (wp.Installation) { MySettings.PSO2Dir = wp.PSO2Path; this.OnPSO2Installed(new PSO2NotifyEventArgs(wp.NewVersionString, wp.PSO2Path, e.FailedList)); } else { this.OnPSO2Installed(new PSO2NotifyEventArgs(wp.NewVersionString, false, e.FailedList)); } } break; default: if (e.UserToken != null && e.UserToken is WorkerParams) { WorkerParams wp = e.UserToken as WorkerParams; if (!string.IsNullOrWhiteSpace(wp.NewVersionString)) { MySettings.PSO2Version = wp.NewVersionString; } if (wp.Installation) { MySettings.PSO2Dir = wp.PSO2Path; this.OnPSO2Installed(new PSO2NotifyEventArgs(wp.NewVersionString, wp.PSO2Path)); } else { this.OnPSO2Installed(new PSO2NotifyEventArgs(wp.NewVersionString, false)); } } break; } } anothersmallthreadpool.Dispose(); }
private void UpdateGame(WorkerParams wp) { this.bWorker.RunWorkerAsync(wp); }