Exemplo n.º 1
0
        public void CheckForUpdate(string updateUrl = Constants.UpdateUrl)
        {
            try {
                string updateJSON = _WebClient.DownloadString(updateUrl);

                using (StringReader jsonFile = new StringReader(updateJSON)) {
                    JsonSerializer jsonSerializer = new JsonSerializer {
                        DateTimeZoneHandling = DateTimeZoneHandling.Local
                    };

                    _UpdateFile = (UpdateFile)jsonSerializer.Deserialize(jsonFile, typeof(UpdateFile));
                }
                if (_UpdateFile == null)
                {
                    throw new NullReferenceException("_UpdateFile is null.");
                }

                _UpdateVersion = Version.Parse(_UpdateFile.CurrentVersion.ToString(3));

                int result = _LocalVersion.CompareTo(_UpdateVersion);
                if (result > 0)   // Current version is greater
                {
                    Dispose();
                }
                else if (result < 0)     // Update version is greater
                {
                    LoggingManager.Log.Info($"There is an update available: {_UpdateFile.ToString()}");
                    UpdateAvailable();
                }
                else     // Versions are equal
                {
                    Dispose();
                }
            } catch (Exception ex) {
                LoggingManager.Log.Error(ex);
                Dispose();
            }
        }
Exemplo n.º 2
0
        private static void Main(string[] args)
        {
            Console.Title = COPYRIGHT;

            string langFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Wow.FileName.LANG_FILE_NAME);
            string pidFile  = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Wow.FileName.PID_FILE_NAME);

            if (!File.Exists(langFile)) //Если файл не существует, вывод сообщения, завершение работы
            {
                ConsoleHelper.WriteErrorLine("File \"{0}\" not found!", Wow.FileName.LANG_FILE_NAME);
                Console.ReadKey();
                return; //завершение работы метода (в данном случае программы)
            }

            string[] files = Directory.GetFiles(
                AppDomain.CurrentDomain.BaseDirectory, "*.mpq", SearchOption.AllDirectories);
            if (files.Length == 0) //Если файлы не найдены, вывод сообщения, завершение работы
            {
                ConsoleHelper.WriteErrorLine("Put all *.mpq files next to the program.");
                Console.ReadKey();
                return; //завершение работы метода (в данном случае программы)
            }

            StreamReader reader = null;
            string       message;

            try
            {
                reader = new StreamReader(pidFile);
                string pidHash = reader.ReadLine();
                string version = reader.ReadLine();
                message = string.Format("Enter a next version update (Current version: {0}): ", version);
                Console.Write(message);
                reader.Close();
            }
            catch (Exception ex)
            {
                ConsoleHelper.WriteErrorLine("When reading a file \"{0}\" an error has occurred:", Wow.FileName.PID_FILE_NAME);
                ConsoleHelper.WriteErrorLine(ex.Message);
                Console.ReadKey();
                return; //завершение работы метода (в данном случае программы)
            }
            finally
            {
                if (reader != null)
                {
                    reader.Dispose();
                }
            }

            uint newVersion;

            while (!uint.TryParse(Console.ReadLine(), out newVersion))
            {
                ConsoleHelper.WriteErrorLine("Error! Enter a number a next version update.");
                Console.Write(message);
            }
            Console.WriteLine();

            int    processedFilesCounter = 0;
            string localeFolderName      = FileHelper.Txt.ReadFirstLine(langFile);

            string patchFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Wow.FileName.PATCH_FILE_NAME);

            using (StreamWriter sw = File.CreateText(patchFile))
            {
                for (int i = 0; i < files.Length; i++)
                {
                    UpdateFile updFile       = UpdateFile.FromFile(files[i], localeFolderName);
                    string     formattedLine = updFile.ToString();

                    Console.WriteLine("Load => {0} {1}", updFile.FolderName, updFile.FileName);
                    Console.WriteLine("Complete => {0}", formattedLine);
                    sw.WriteLine(formattedLine);

                    //Console.WriteLine("1---------2---------3---------4---------5---------6---------7---------8---------"); //80 символов
                    ConsoleHelper.WriteSeparatorLine('-', ConsoleColor.DarkCyan);
                    processedFilesCounter++;
                }
            }

            string       newVersionHash = HashHelper.GetMD5Hash(newVersion.ToString());
            StreamWriter writer         = null;

            try
            {
                writer = new StreamWriter(pidFile);
                writer.WriteLine(newVersionHash);
                writer.WriteLine(newVersion);
                writer.Close();
            }
            catch (Exception ex)
            {
                ConsoleHelper.WriteError("When writing a file \"{0}\" an error has occurred:", Wow.FileName.PID_FILE_NAME);
                ConsoleHelper.WriteErrorLine(ex.Message);
                Console.ReadKey();
                return; //завершение работы метода (в данном случае программы)
            }
            finally
            {
                if (writer != null)
                {
                    writer.Dispose();
                }
            }

            Console.WriteLine("{0} created! Processed *.mpq files: {1}", Wow.FileName.PATCH_FILE_NAME, processedFilesCounter);
            Console.WriteLine();
            Console.WriteLine("{0}, Skype: darksapfir1,  vk.com/6stprod", COPYRIGHT);
            Console.ReadKey();
        }