Пример #1
0
        /// <summary>
        /// Download the view from the server
        /// </summary>
        protected bool LoadView(Type viewType, int viewID, DateTime viewAge,
                                ref BaseView view, out DateTime newViewAge)
        {
            var viewProps = GetViewProps(viewID);

            newViewAge = serverComm.ReceiveFileAge(ServerComm.Dirs.Itf, viewProps.Path);

            if (newViewAge == DateTime.MinValue)
            {
                throw new ScadaException("Unable to receive view file modification time.");
            }

            if (newViewAge == viewAge)
            {
                return(false);                       // view file changed
            }
            // creating and loading a new view
            if (view == null)
            {
                view = (BaseView)Activator.CreateInstance(viewType);
            }

            if (serverComm.ReceiveView(viewProps.Path, view))
            {
                return(true);
            }

            throw new ScadaException("Unable to receive view.");
        }
Пример #2
0
        /// <summary>
        /// Загрузить представление от сервера
        /// </summary>
        protected bool LoadView(Type viewType, int viewID, DateTime viewAge,
                                ref BaseView view, out DateTime newViewAge)
        {
            UiObjProps viewProps = GetViewProps(viewID);

            newViewAge = serverComm.ReceiveFileAge(ServerComm.Dirs.Itf, viewProps.Path);

            if (newViewAge == DateTime.MinValue)
            {
                throw new ScadaException(Localization.UseRussian ?
                                         "Не удалось принять время изменения файла представления." :
                                         "Unable to receive view file modification time.");
            }
            else if (newViewAge != viewAge) // файл представления изменён
            {
                // создание и загрузка нового представления
                if (view == null)
                {
                    view = (BaseView)Activator.CreateInstance(viewType);
                }

                view.SetArgs(viewProps.Args);

                if (serverComm.ReceiveView(viewProps.Path, view))
                {
                    view.UpdateTitle(viewProps.ShortTitle);
                    return(true);
                }
                else
                {
                    throw new ScadaException(Localization.UseRussian ?
                                             "Не удалось принять представление." :
                                             "Unable to receive view.");
                }
            }
            else
            {
                return(false);
            }
        }
Пример #3
0
        /// <summary>
        /// Получить представление из кэша или от сервера
        /// </summary>
        public T GetView <T>(int viewID, bool throwOnError = false) where T : BaseView
        {
            try
            {
                T view = null;

                // получение представления из кеша
                DateTime utcNowDT = DateTime.UtcNow;
                Cache <int, BaseView> .CacheItem cacheItem = cache.GetItem(viewID, utcNowDT);
                BaseView viewFromCache;
                DateTime viewAge;        // время изменения файла представления
                bool     viewIsNotValid; // представление могло устареть

                if (cacheItem == null)
                {
                    viewFromCache  = null;
                    viewAge        = DateTime.MinValue;
                    viewIsNotValid = true;
                }
                else
                {
                    viewFromCache  = cacheItem.Value;
                    viewAge        = cacheItem.ValueAge;
                    viewIsNotValid = utcNowDT - cacheItem.ValueRefrDT > ViewValidSpan;
                }

                // получение представления от сервера
                if (viewFromCache == null || viewIsNotValid)
                {
                    ViewProps viewProps = dataAccess.GetViewProps(viewID);

                    if (viewProps == null)
                    {
                        if (throwOnError)
                        {
                            throw new ScadaException(Localization.UseRussian ?
                                                     "Отсутствуют свойства представления." :
                                                     "View properties are missing.");
                        }
                    }
                    else
                    {
                        DateTime newViewAge = serverComm.ReceiveFileAge(ServerComm.Dirs.Itf, viewProps.FileName);

                        if (newViewAge == DateTime.MinValue)
                        {
                            if (throwOnError)
                            {
                                throw new ScadaException(Localization.UseRussian ?
                                                         "Не удалось принять время изменения файла представления." :
                                                         "Unable to receive view file modification time.");
                            }
                        }
                        else if (newViewAge != viewAge) // файл представления изменён
                        {
                            // создание и загрузка нового представления
                            view = (T)Activator.CreateInstance(typeof(T));
                            if (serverComm.ReceiveView(viewProps.FileName, view))
                            {
                                if (cacheItem == null)
                                {
                                    // добавление представления в кеш
                                    cache.AddValue(viewID, view, newViewAge, utcNowDT);
                                }
                                else
                                {
                                    // обновление представления в кеше
                                    cache.UpdateItem(cacheItem, view, newViewAge, utcNowDT);
                                }
                            }
                            else
                            {
                                if (throwOnError)
                                {
                                    throw new ScadaException(Localization.UseRussian ?
                                                             "Не удалось принять представление." :
                                                             "Unable to receive view.");
                                }
                            }
                        }
                    }
                }

                // использование представление из кеша
                if (view == null && viewFromCache != null)
                {
                    view = viewFromCache as T;
                    if (view == null && throwOnError)
                    {
                        throw new ScadaException(Localization.UseRussian ?
                                                 "Несоответствие типа представления." :
                                                 "View type mismatch.");
                    }
                }

                return(view);
            }
            catch (Exception ex)
            {
                string errMsg = string.Format(Localization.UseRussian ?
                                              "Ошибка при получении представления с ид.={0} из кэша или от сервера" :
                                              "Error getting view with ID={0} from the cache or from the server", viewID);
                log.WriteException(ex, errMsg);

                if (throwOnError)
                {
                    throw new ScadaException(errMsg);
                }
                else
                {
                    return(null);
                }
            }
        }