Esempio n. 1
0
        private void ResumeConnectionWithServer()
        {
            try
            {
                serverProxyTrade = new TradeSharpServerTrade(this);
            }
            catch (Exception ex)
            {
                Logger.Error("Ошибка подключения к серверу МТС.Live (Trade)", ex);
            }
            SubscriptionModel.Instance.ServerProxy = serverProxyTrade.proxy;

            try
            {
                newsProxy = new NewsStorageProxy("INewsStorageBinding");
            }
            catch (Exception)
            {
                Logger.Error("Связь с сервером (INewsStorageBinding) не установлена");
            }
        }
Esempio n. 2
0
        private void ActualizeSync(object accountIdObj)
        {
            var totalNews = 0;
            try
            {
                if (isTerminating) return;
                var accountId = (int)accountIdObj;
                if (accountId == 0)
                {
                    var accountData = AccountStatus.Instance.AccountData;
                    if (accountData != null)
                        accountId = accountData.ID;
                    if (accountId == 0) return;
                }

                // получить от сервера карту новостей
                NewsMap serverNewsMap = null;
                try
                {
                    using (var proxy = new NewsStorageProxy(TerminalBindings.BindingNewsStorage))
                    {
                        serverNewsMap = proxy.GetNewsMap(accountId);
                    }
                }
                catch (Exception ex)
                {
                    Logger.ErrorFormat("NewsCache({0}) - ошибка получения карты новостей: {1}",
                        accountId, ex);
                }
                if (serverNewsMap == null) return;
                if (isTerminating) return;

                // сформировать список каналов / дат, на которые нужно подкачать новости
                var lackMap = map.MakeMapOfLackedNews(serverNewsMap);
                if (lackMap.records.Length == 0 || serverNewsMap.channelIds.Length == 0)
                    return;

                // подкачать новости по указанным каналам за указанные даты
                var numFailsLeft = StopAskingServerAfterFails + 1;
                using (var proxy = new NewsStorageProxy(TerminalBindings.BindingNewsStorage))
                    foreach (var rec in lackMap.records)
                    {
                        if (isTerminating) break;

                        try
                        {
                            var news = proxy.GetNews(accountId, rec.date, serverNewsMap.channelIds);
                            if (news == null || news.Count == 0) continue;
                            totalNews += news.Count;
                            // обновить кеш новостей
                            NewsLocalStorage.Instance.UpdateNews(news);
                        }
                        catch (Exception ex)
                        {
                            numFailsLeft--;
                            if (numFailsLeft == 0) break;
                            Logger.Error("Ошибка в NewsCache.ActualizeSync()", ex);
                        }
                    }

                // сохранить кешированные новости
                NewsLocalStorage.Instance.SaveNewsInFiles();
                // обновить карту новостей
                map = NewsLocalStorage.Instance.MakeNewsMap(); //serverNewsMap;
                map.SaveInFile(mapPath);
            }
            finally
            {
                syncCompletedEvent.Set();
            }
            if (actualizationCompleted != null && !isTerminating)
                actualizationCompleted(totalNews);
        }