Ejemplo n.º 1
0
        /// <summary>
        /// ForTestOnly
        /// </summary>
        private void buttonX1_Click(object sender, EventArgs e)
        {
            WzPatcher patcher = new WzPatcher(@"F:\TDDOWNLOAD\Anime\00475to00476.patch");

            patcher.OpenDecompress();
            patcher.PrePatch();
            System.Diagnostics.Stopwatch sw = System.Diagnostics.Stopwatch.StartNew();
            foreach (PatchPartContext part in patcher.PatchParts)
            {
                if (part.FileName.Equals("map.wz", StringComparison.OrdinalIgnoreCase))
                {
                    patcher.RebuildFile(part, @"E:\", @"E:\MapleT");
                    break;
                }
            }
            sw.Stop();
            MessageBoxEx.Show(sw.ElapsedMilliseconds.ToString());
            patcher.Close();
        }
Ejemplo n.º 2
0
        private void ExecutePatch(string patchFile, string msFolder, bool prePatch)
        {
            WzPatcher patcher = null;

            advTreePatchFiles.Nodes.Clear();
            txtNotice.Clear();
            txtPatchState.Clear();
            this.loggingFileName = Path.Combine(msFolder, $"wcpatcher_{DateTime.Now:yyyyMMdd_HHmmssfff}.log");
            try
            {
                patcher = new WzPatcher(patchFile);
                patcher.PatchingStateChanged += new EventHandler <PatchingEventArgs>(patcher_PatchingStateChanged);
                AppendStateText("Checking paths...");
                patcher.OpenDecompress();
                AppendStateText("Success\r\n");
                if (prePatch)
                {
                    AppendStateText("Pre-reading patch file...\r\n");
                    long decompressedSize = patcher.PrePatch();
                    if (patcher.IsKMST1125Format.Value)
                    {
                        AppendStateText("Patch Type:KMST1125\r\n");
                        if (patcher.OldFileHash != null)
                        {
                            AppendStateText($"Original File Info:{patcher.OldFileHash.Count} 个\r\n");
                        }
                    }
                    AppendStateText(string.Format("Patch Size: {0:N0} bytes...\r\n", decompressedSize));
                    AppendStateText(string.Format("File Changes: {0} 个...\r\n",
                                                  patcher.PatchParts == null ? -1 : patcher.PatchParts.Count));
                    txtNotice.Text = patcher.NoticeText;
                    foreach (PatchPartContext part in patcher.PatchParts)
                    {
                        advTreePatchFiles.Nodes.Add(CreateFileNode(part));
                    }
                    advTreePatchFiles.Enabled = true;
                    AppendStateText("Waiting to adjust update order...\r\n");
                    waiting = true;
                    waitHandle.WaitOne();
                    advTreePatchFiles.Enabled = false;
                    patcher.PatchParts.Clear();
                    for (int i = 0, j = advTreePatchFiles.Nodes.Count; i < j; i++)
                    {
                        if (advTreePatchFiles.Nodes[i].Checked)
                        {
                            patcher.PatchParts.Add(advTreePatchFiles.Nodes[i].Tag as PatchPartContext);
                        }
                    }
                }
                AppendStateText("Starting Update\r\n");
                DateTime time = DateTime.Now;
                patcher.Patch(msFolder);
                AppendStateText("Complete\r\n");
                TimeSpan interval = DateTime.Now - time;
                MessageBoxEx.Show(this, "End of Patch, Duration: " + interval.ToString(), "Patcher");
            }
            catch (ThreadAbortException)
            {
                MessageBoxEx.Show("Patch Aborted。", "Patcher");
            }
            catch (Exception ex)
            {
                AppendStateText(ex.ToString());
                MessageBoxEx.Show(this, ex.ToString(), "Patcher");
            }
            finally
            {
                if (patcher != null)
                {
                    patcher.Close();
                    patcher = null;
                }
                patchThread = null;
                waitHandle  = null;
                GC.Collect();

                panelEx2.Visible        = false;
                expandablePanel2.Height = 157;
            }
        }
Ejemplo n.º 3
0
        private void ExecutePatch(string patchFile, string msFolder, bool prePatch)
        {
            WzPatcher patcher = null;

            advTreePatchFiles.Nodes.Clear();
            txtNotice.Clear();
            txtPatchState.Clear();
            try
            {
                patcher = new WzPatcher(patchFile);
                patcher.PatchingStateChanged += new EventHandler <PatchingEventArgs>(patcher_PatchingStateChanged);
                AppendStateText("Checking patch...");
                patcher.OpenDecompress();
                AppendStateText("Success\r\n");
                if (prePatch)
                {
                    AppendStateText("Pre-reading patch...\r\n");
                    long decompressedSize = patcher.PrePatch();
                    AppendStateText(string.Format("Patch Size: {0:N0} bytes...\r\n", decompressedSize));
                    AppendStateText(string.Format("File Changes: {0} 个...\r\n",
                                                  patcher.PatchParts == null ? -1 : patcher.PatchParts.Count));
                    txtNotice.Text = patcher.NoticeText;
                    foreach (PatchPartContext part in patcher.PatchParts)
                    {
                        advTreePatchFiles.Nodes.Add(CreateFileNode(part));
                    }
                    advTreePatchFiles.Enabled = true;
                    AppendStateText("Adjusting the update order...\r\n");
                    waiting = true;
                    waitHandle.WaitOne();
                    advTreePatchFiles.Enabled = false;
                    patcher.PatchParts.Clear();
                    for (int i = 0, j = advTreePatchFiles.Nodes.Count; i < j; i++)
                    {
                        if (advTreePatchFiles.Nodes[i].Checked)
                        {
                            patcher.PatchParts.Add(advTreePatchFiles.Nodes[i].Tag as PatchPartContext);
                        }
                    }
                }
                AppendStateText("Starting Update: \r\n");
                DateTime time = DateTime.Now;
                patcher.Patch(msFolder);
                TimeSpan interval = DateTime.Now - time;
                MessageBoxEx.Show(this, "End of Patch, Time Elapsed: " + interval.ToString(), "Patcher");
            }
            catch (ThreadAbortException)
            {
                MessageBoxEx.Show("Patch Aborted.", "Patcher");
            }
            catch (Exception ex)
            {
                MessageBoxEx.Show(this, ex.ToString(), "Patcher");
            }
            finally
            {
                if (patcher != null)
                {
                    patcher.Close();
                    patcher = null;
                }
                patchThread = null;
                waitHandle  = null;
                GC.Collect();

                panelEx2.Visible        = false;
                expandablePanel2.Height = 157;
            }
        }
Ejemplo n.º 4
0
        private void ExecutePatch(string patchFile, string msFolder, bool prePatch)
        {
            WzPatcher patcher = null;

            advTreePatchFiles.Nodes.Clear();
            txtNotice.Clear();
            txtPatchState.Clear();
            this.loggingFileName = Path.Combine(msFolder, $"wcpatcher_{DateTime.Now:yyyyMMdd_HHmmssfff}.log");
            try
            {
                patcher = new WzPatcher(patchFile);
                patcher.PatchingStateChanged += new EventHandler <PatchingEventArgs>(patcher_PatchingStateChanged);
                AppendStateText($"补丁文件:{patchFile}\r\n");
                AppendStateText("正在检查补丁...");
                patcher.OpenDecompress();
                AppendStateText("成功\r\n");
                if (prePatch)
                {
                    AppendStateText("正在预读补丁...\r\n");
                    long decompressedSize = patcher.PrePatch();
                    if (patcher.IsKMST1125Format.Value)
                    {
                        AppendStateText("补丁类型:KMST1125\r\n");
                        if (patcher.OldFileHash != null)
                        {
                            AppendStateText($"获取原文件信息:{patcher.OldFileHash.Count} 个\r\n");
                        }
                    }
                    AppendStateText(string.Format("补丁大小: {0:N0} bytes...\r\n", decompressedSize));
                    AppendStateText(string.Format("文件变动: {0} 个...\r\n",
                                                  patcher.PatchParts == null ? -1 : patcher.PatchParts.Count));
                    txtNotice.Text = patcher.NoticeText;
                    foreach (PatchPartContext part in patcher.PatchParts)
                    {
                        advTreePatchFiles.Nodes.Add(CreateFileNode(part));
                    }
                    advTreePatchFiles.Enabled = true;
                    AppendStateText("等待调整更新顺序...\r\n");
                    waiting = true;
                    waitHandle.WaitOne();
                    advTreePatchFiles.Enabled = false;
                    patcher.PatchParts.Clear();
                    for (int i = 0, j = advTreePatchFiles.Nodes.Count; i < j; i++)
                    {
                        if (advTreePatchFiles.Nodes[i].Checked)
                        {
                            patcher.PatchParts.Add(advTreePatchFiles.Nodes[i].Tag as PatchPartContext);
                        }
                    }
                }
                AppendStateText("开始更新\r\n");
                DateTime time = DateTime.Now;
                patcher.Patch(msFolder);
                AppendStateText("完成\r\n");
                TimeSpan interval = DateTime.Now - time;
                MessageBoxEx.Show(this, "补丁结束,用时" + interval.ToString(), "Patcher");
            }
            catch (ThreadAbortException)
            {
                MessageBoxEx.Show("补丁中止。", "Patcher");
            }
            catch (Exception ex)
            {
                AppendStateText(ex.ToString());
                MessageBoxEx.Show(this, ex.ToString(), "Patcher");
            }
            finally
            {
                if (patcher != null)
                {
                    patcher.Close();
                    patcher = null;
                }
                patchThread = null;
                waitHandle  = null;
                GC.Collect();

                panelEx2.Visible        = false;
                expandablePanel2.Height = 157;
            }
        }