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) не установлена"); } }
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); }