示例#1
0
        public bool IsNewerThan(ProgramVersion ver)
        {
            if (ver == null) {
                return true;
            }

            if (Major < ver.Major) {
                return false;
            } else if (Major > ver.Major) {
                return true;
            }

            if (Minor < ver.Minor) {
                return false;
            } else if (Minor > ver.Minor) {
                return true;
            }

            if (Maintenance < ver.Maintenance) {
                return false;
            } else if (Maintenance > ver.Maintenance) {
                return true;
            }
            if (Build < ver.Build) {
                return false;
            } else if (Build < ver.Build) {
                return true;
            }

            return true;
        }
示例#2
0
        private void backgroundWorkerUpdate_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            if (StatusProcessor.Status != (int) StatusProcessor.StatusCodes.Updating) {
                e.Cancel = true;
                return;
            }

            BackgroundWorker backgroundWorker = sender as BackgroundWorker;

            if (backgroundWorker != null) {

                String checksum = "";

                String DL = GuiController.PATCHURL + GuiController.PATCHER;
                String ChksumDL = DL + ".md5";
                String Local = Controller.SwgSavePath + @"\" + GuiController.PATCHER;
                String LocalTmp =  Local + ".part";

                String lpatchsrv = "";

                WebClient wc = new WebClient();

                using (StreamReader upstreamVersionStreamReader = new StreamReader(wc.OpenRead(GuiController.PATCHURL + "lpatchinst.cfg"))) {

                    int i = 0;
                    while (lpatchsrv == "" && i < 20 && !backgroundWorker.CancellationPending) {
                        backgroundWorker.ReportProgress( 1, "Debug Try determine remote patcher version");
                        backgroundWorker.ReportProgress( 1, " Try determine remote patcher version");
                        lpatchsrv = upstreamVersionStreamReader.ReadToEnd();
                        i++;
                    }
                }

                lpatchsrv = lpatchsrv.Trim();

                if (lpatchsrv == "") {
                    e.Cancel = true;
                    return;
                }

                ProgramVersion ThisVersion = new ProgramVersion(Controller.GetProgramVersion());
                ProgramVersion ServerVersion = new ProgramVersion(lpatchsrv);

                backgroundWorker.ReportProgress(2,"Debug Local Launcher Version" + Controller.GetProgramVersion() + "|" + ThisVersion.ToCompactString() + " |" + ThisVersion.ToString());
                backgroundWorker.ReportProgress(2,"Debug Server Launcher Version" + lpatchsrv + "|" + ServerVersion.ToCompactString() + " |" + ServerVersion.ToString());

                if (ThisVersion.IsNewerThan(ServerVersion)) {
                    backgroundWorker.ReportProgress(99,"Debug Launcher is uptodate, updating finished.");
                    backgroundWorker.ReportProgress(100,"Updating finished.");
                    return;
                }

                using (StreamReader upstreamVersionStreamReader = new StreamReader(wc.OpenRead(ChksumDL))) {
                    int i = 0;
                    while (checksum == "" && i < 20 && !backgroundWorker.CancellationPending) {
                        backgroundWorker.ReportProgress( 3, "Debug Try DL updater checksums");
                        backgroundWorker.ReportProgress( 3, "Try DL updater Checksums");
                        checksum = Regex.Replace(upstreamVersionStreamReader.ReadToEnd(),"\n","");
                        i++;
                    }
                }

                if (checksum == "") {
                    backgroundWorker.ReportProgress( 3, "Debug problem DL'ing updater checksums!");
                    e.Cancel = true;
                    return;
                }
                backgroundWorker.ReportProgress( 4, "Debug downloaded updater checksums!");
                backgroundWorker.ReportProgress( 4, "Debug Looking for...." + Local);

                if (File.Exists(Local)) {
                    if (SWGFile.MatchChecksum(Local,checksum)){
                        backgroundWorker.ReportProgress(99,"Debug Found local file, matching.");
                        backgroundWorker.ReportProgress(100,"installer available");
                        return;
                    }
                    backgroundWorker.ReportProgress(5,"Debug Found local file, but it did not match.");
                } else {
                    backgroundWorker.ReportProgress( 5, "Debug No luck, updater needs downloading");
                }

                try {

                    backgroundWorker.ReportProgress(5,"downloading installer");
                    backgroundWorker.ReportProgress(5,"Debug downloading installer");

                    wc.OpenRead(DL);
                    Int64 targetsize = Convert.ToInt64(wc.ResponseHeaders["Content-Length"]);
                    long Filesize = 0;
                    long offset = 0;

                    while (Filesize < targetsize && !backgroundWorker.CancellationPending) {

                        int progress = ((int) (100/targetsize * offset) );

                        HTTPDownload(LocalTmp, DL, offset, backgroundWorker, progress, true);

                        if (File.Exists(LocalTmp)) {
                            FileInfo f = new FileInfo(LocalTmp);
                            Filesize = f.Length;
                            offset = Filesize;
                        }
                    }

                    if (SWGFile.MatchChecksum(LocalTmp,checksum) ) {
                        backgroundWorker.ReportProgress(99, "Debug " + "Downloaded " + LocalTmp);

                        if (File.Exists(Local)) {
                            File.Delete(Local);
                        }

                        File.Move(LocalTmp, Local);

                        backgroundWorker.ReportProgress(100, "installer available");
                        return;

                    } else {
                        e.Cancel = true;
                        backgroundWorker.ReportProgress(99, "Debug " + "Postpatch checksum mismatch " + LocalTmp);
                    }

                } catch (Exception ex) {
                    e.Cancel = true;
                    backgroundWorker.ReportProgress(99, "Debug " + "Error patching " + LocalTmp + " " + ex);
                }
            }

            if(backgroundWorker.CancellationPending) {
                 e.Cancel = true;
            }
            else {
                    backgroundWorker.ReportProgress(100,"Updating finished.");
            }
        }