コード例 #1
0
        /// <summary>
        /// Update current data
        /// </summary>
        protected void RefreshCurData()
        {
            try {
                var utcNowDT = DateTime.UtcNow;
                if (utcNowDT - curDataRefrDT > DataValidSpan)   // data is out of date
                {
                    curDataRefrDT = utcNowDT;
                    var newCurTableAge = serverComm.ReceiveFileAge(ServerComm.Dirs.Cur, SrezAdapter.CurTableName);

                    if (newCurTableAge == DateTime.MinValue)
                    {
                        // the slice file does not exist or there is no connection to the server
                        tblCur.Clear();
                        tblCur.FileModTime = DateTime.MinValue;
                        log.WriteError("Unable to receive the current data file modification time.");
                    }
                    else if (tblCur.FileModTime != newCurTableAge)     // slice file changed
                    {
                        if (serverComm.ReceiveSrezTable(SrezAdapter.CurTableName, tblCur))
                        {
                            tblCur.FileModTime  = newCurTableAge;
                            tblCur.LastFillTime = utcNowDT;
                        }
                        else
                        {
                            tblCur.FileModTime = DateTime.MinValue;
                        }
                    }
                }
            } catch (Exception ex) {
                tblCur.FileModTime = DateTime.MinValue;
                log.WriteException(ex, "Error refreshing the current data");
            }
        }
コード例 #2
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.");
        }
コード例 #3
0
ファイル: DataCache.cs プロジェクト: xiaomailong/scada
        /// <summary>
        /// Обновить текущие данные
        /// </summary>
        protected void RefreshCurData()
        {
            try
            {
                DateTime utcNowDT = DateTime.UtcNow;
                if (utcNowDT - curRefrDT > DataValidSpan) // данные устарели
                {
                    curRefrDT = utcNowDT;
                    DateTime newCurAge = serverComm.ReceiveFileAge(ServerComm.Dirs.Cur, SrezAdapter.CurTableName);

                    if (newCurAge == DateTime.MinValue)
                    {
                        throw new ScadaException(Localization.UseRussian ?
                                                 "Не удалось принять время изменения файла текущих данных." :
                                                 "Unable to receive the current data file modification time.");
                    }
                    else if (tblCur.FileModTime != newCurAge) // файл среза изменён
                    {
                        if (serverComm.ReceiveSrezTable(SrezAdapter.CurTableName, tblCur))
                        {
                            tblCur.FileModTime  = newCurAge;
                            tblCur.LastFillTime = utcNowDT;
                        }
                        else
                        {
                            curRefrDT          = DateTime.MinValue;
                            tblCur.FileModTime = DateTime.MinValue;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                curRefrDT          = DateTime.MinValue;
                tblCur.FileModTime = DateTime.MinValue;

                log.WriteException(ex, Localization.UseRussian ?
                                   "Ошибка при обновлении текущих данных" :
                                   "Error refreshing the current data");
            }
        }
コード例 #4
0
ファイル: ViewCache.cs プロジェクト: zuoyangithub/scada
        /// <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);
            }
        }
コード例 #5
0
ファイル: ViewCache.cs プロジェクト: xiaomailong/scada
        /// <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);
                }
            }
        }