public void CompareWithServer()
        {
            var diffFileNames = new[] { "\\mt4\\udpcommandtranslator.mq4", "\\sounds\\error.wav" };

            var serverFiles = TestDataGenerator.GetServerFiles();
            var ownFiles    = TestDataGenerator.GetOwnFiles();

            var diffs = ClientFileBrowser.CompareWithServer(serverFiles, ownFiles);

            Assert.AreEqual(diffFileNames.Length, diffs.Count, "Количество обновлённых файлов определено неверно");

            foreach (var diffFileName in diffs)
            {
                if (!diffFileNames.Contains(diffFileName.FileName))
                {
                    Assert.Fail("не найден изменённый файл {0}", diffFileName);
                }
            }
        }
        public void GetFileVersions()
        {
            var fileVersions = ClientFileBrowser.GetFileVersions(Logger.ErrorFormat);

            Assert.NotNull(fileVersions);
        }
        private void DoCheckUpdates(object data)
        {
            try
            {
                // получить версии файлов на сервере
                List <FileVersion> serverFiles;
                try
                {
                    var factory = new ChannelFactory <IUpdateManager>("IUpdateManagerBinding");
                    var channel = factory.CreateChannel();
                    var files   = channel.GetFileProperties(SystemName.Terminal);
                    serverFiles = files.Select(f => new FileVersion
                    {
                        FileName = f.Path + "\\" + f.Name,
                        Date     = f.TimeUpdated,
                        Length   = f.Length,
                        HashCode = f.HashCode
                    }).ToList();
                    if (serverFiles.Count == 0)
                    {
                        Logger.Error("Ошибка получения версий файлов на сервере");
                        return;
                    }
                }
                catch (Exception ex)
                {
                    Logger.Error("Ошибка получения версий файлов на сервере", ex);
                    return;
                }

                // получить версии файлов в родном каталоге
                var ownFiles = ClientFileBrowser.GetFileVersions(Logger.ErrorFormat);
                var diffs    = ClientFileBrowser.CompareWithServer(serverFiles, ownFiles);

                if (diffs.Count == 0)
                {
                    return;
                }

                // антиспам
                var difHash = diffs.Sum(d => d.MakeHash());
                if (lastUpdateFileDiffHash == difHash)
                {
                    return;
                }
                lastUpdateFileDiffHash = difHash;

                // предупредить пользователя о том, что некоторые файлы нуждаются в обновлении
                try
                {
                    EventSoundPlayer.Instance.PlayEvent(VocalizedEvent.TradeSignal);
                }
                catch (Exception ex)
                {
                    Logger.Error("DoCheckUpdates() - EventSoundPlayer error", ex);
                }

                AddUrlToStatusPanelSafe(DateTime.Now,
                                        string.Format(
                                            Localizer.GetString("MessageSomeFilesOutdatedFmt"),
                                            diffs.Count), "Restart");

                var listFiles = string.Join(" ", diffs.Select(d => d.FileName));
                if (listFiles.Length > 255)
                {
                    listFiles = listFiles.Substring(0, 252) + "...";
                }

                ShowMsgWindowSafe(new AccountEvent(
                                      Localizer.GetString("MessageTerminalUpdateAvailable"),
                                      string.Format(Localizer.GetString("MessageNFilesOutdatedFmt"), diffs.Count) +
                                      ": " + listFiles, AccountEventCode.UpdatePending));
            }
            catch (Exception ex)
            {
                Logger.Error("Ошибка процедуры проверки обновлений на сервере", ex);
            }
            finally
            {
                updateCheckInProgress = false;
                lastCheckUpdate.Touch();
            }
        }