Esempio n. 1
0
        /// <summary>
        /// Проверить наличие обновлений на сервере.
        /// </summary>
        /// <returns></returns>
        public Task <bool> CheckUpdateAsync()
        {
            return(Task.Factory.StartNew(() =>
            {
                //Уведомляем подписчиков, что проверка наличия новой версии запущена.
                OnUpdateStateChanged(UpdateState.Checking);

                string localPidFile = _localPidFile;
                string localPidHash = null;
                if (File.Exists(localPidFile)) //если локальный файл с хэшем версии обновления найден
                {
                    localPidHash = Pid.FromTextFile(localPidFile).Hash;
                }

                WebClient web = _webClientFactory.Create();
                string pidText = web.DownloadString(_serverPidFile);
                Pid downloadedPid = Pid.FromString(pidText);

                if (localPidHash == null)
                {
                    Pid newLocalPid = Pid.FromVersionNumber(-1);
                    localPidHash = newLocalPid.Hash;
                    using (StreamWriter writer = File.CreateText(localPidFile))
                    {
                        writer.Write(newLocalPid.ToString());
                    }
                }

                OnUpdateStateChanged(UpdateState.None);
                if (downloadedPid.Hash != localPidHash)
                {
                    _pidFromServer = downloadedPid;
                    return true;
                }

                //Уведомляем подписчиков, что обновление не требуется.
                OnUpdateStateChanged(UpdateState.NotNeeded);
                OnUpdateStateChanged(UpdateState.None);
                return false;
            }));
        }