示例#1
0
        /// <summary>
        /// Получить данные из кэша.
        /// </summary>
        /// <typeparam name="T">Типа данных</typeparam>
        /// <param name="soapMethod">Сервис для получения новых данных</param>
        /// <param name="server">Сервер для подключения</param>
        /// <returns>Данные</returns>
        public T GetData <T>(SOAP1C.SOAPMethod <T> soapMethod, string server) where T : ISOAPData
        {
            string itemType = typeof(T).ToString();

            UpdateInfo updateInfo = UpdateInfoByServer(server, soapMethod.AdditionKey, itemType);

            if (updateInfo == default)
            {
                AddNewCache(soapMethod, server);
            }

            updateInfo = UpdateInfoByServer(server, soapMethod.AdditionKey, itemType);
            if (updateInfo.Time.AddSeconds(_UpdateIntervalInSeconds) < DateTime.Now && !updateInfo.Updating)
            {
                lock (_ProxyData[updateInfo]) {
                    updateInfo.Updating = true;
                    UpdateCache(soapMethod, server, updateInfo);
                    updateInfo.Updating = false;
                }
            }

            T result;

            lock (_LockCopy) {
                result = (T)_ProxyData[updateInfo].Clone();
            }

            return(result);
        }
示例#2
0
        /// <summary>
        /// Обновить данные кэша
        /// </summary>
        /// <param name="soapMethod">Соап метод</param>
        /// <param name="server">Сервер</param>
        /// <param name="updateInfo">Обновляемый кэш</param>
        private void UpdateCache <T>(SOAP1C.SOAPMethod <T> soapMethod, string server, UpdateInfo updateInfo) where T : ISOAPData
        {
            T data = soapMethod.GetData(server);

            updateInfo.Time = DateTime.Now;

            lock (_LockCopy) {
                _ProxyData[updateInfo] = data;
            }
        }
示例#3
0
        /// <summary>
        /// Добавить в кэш новую запись
        /// </summary>
        /// <param name="soapMethod">Соап метод</param>
        /// <param name="server">Сервер</param>
        private void AddNewCache <T>(SOAP1C.SOAPMethod <T> soapMethod, string server) where T : ISOAPData
        {
            T data = soapMethod.GetData(server);

            UpdateInfo updateInfo = new UpdateInfo()
            {
                Server      = server,
                AdditionKey = soapMethod.AdditionKey,
                Time        = DateTime.Now,
                Type        = typeof(T).ToString()
            };

            lock (_LockCopy) {
                _ProxyData.Add(updateInfo, data);
            }
        }