Beispiel #1
0
        /// <summary>
        /// 获取Xml节点属性值
        /// </summary>
        /// <typeparam name="T">数据类型</typeparam>
        /// <param name="node">节点</param>
        /// <param name="name">属性名</param>
        /// <param name="defaultValue">>默认值。如果没有匹配属性存在</param>
        /// <returns></returns>
        public static T GetAttribute <T>(this XmlNode node, string name, T defaultValue = default(T))
        {
            var value = node.GetAttribute(name);

            if (string.IsNullOrWhiteSpace(value))
            {
                return(defaultValue);
            }

            return(ConvHelper.To <T>(value));
        }
Beispiel #2
0
 /// <summary>
 /// 获取指定键名的值
 /// </summary>
 /// <typeparam name="T">泛型</typeparam>
 /// <param name="identity">标识</param>
 /// <param name="key">键名</param>
 /// <returns></returns>
 public static T GetValue <T>(this IIdentity identity, string key)
 {
     return(ConvHelper.To <T>(identity.GetValue(key)));
 }
Beispiel #3
0
 /// <summary>
 /// 获取文件大小,单位:G
 /// </summary>
 /// <returns></returns>
 public double GetSizeByG()
 {
     return(ConvHelper.ToDouble(Size / 1024.0 / 1024.0 / 1024.0, 2));
 }
Beispiel #4
0
        public static ExpirationHint GetExpirationHintObj(Alachisoft.NCache.Config.Dom.ExpirationPolicy policy, Alachisoft.NCache.Common.Protobuf.Dependency dependency, long absoluteExpiration, long slidingExpiration, bool resyncOnExpiration, string serializationContext)
        {
            ConvHelper.ValidateExpiration(policy);
            ExpirationHint hint  = null;
            const long     TICKS = 10000000;

            if ((absoluteExpiration == 1 || absoluteExpiration == 2) || (slidingExpiration == 1 || slidingExpiration == 2))
            {
                if (policy.SlidingExpiration.LongerEnabled || policy.SlidingExpiration.DefaultEnabled || policy.AbsoluteExpiration.LongerEnabled || policy.AbsoluteExpiration.DefaultEnabled)
                {
                    #region In case user provides sliding expiration as an enum

                    if (absoluteExpiration == 0)
                    {
                        if (policy.SlidingExpiration.LongerEnabled && slidingExpiration == 2)
                        {
                            hint = new IdleExpiration(new TimeSpan(policy.SlidingExpiration.Longer * TICKS));
                        }
                        else if (policy.SlidingExpiration.DefaultEnabled && slidingExpiration == 1)
                        {
                            hint = new IdleExpiration(new TimeSpan(policy.SlidingExpiration.Default * TICKS));
                        }
                    }
                    #endregion

                    #region In case user provides absolute expiration as an enum

                    if (slidingExpiration == 0)
                    {
                        if (policy.AbsoluteExpiration.LongerEnabled && absoluteExpiration == 2)// If not enabled try to check if Longer Expiration is enabled
                        {
                            hint = new FixedExpiration(DateTime.Now.AddSeconds(policy.AbsoluteExpiration.Longer).ToUniversalTime());
                        }
                        else if (absoluteExpiration == 1 && policy.AbsoluteExpiration.DefaultEnabled)// check if Longer is enabled in config
                        {
                            hint = new FixedExpiration(DateTime.Now.AddSeconds(policy.AbsoluteExpiration.Default).ToUniversalTime());
                        }
                    }
                    #endregion
                }
                else
                {
                    absoluteExpiration = 0;// If user provides custom expiration but it is NOT enabled then item will stay in cache, forever.
                }
            }

            //We expect Web.Cache to send in UTC DateTime, AbsoluteExpiration is dealt in UTC
            if (absoluteExpiration != 0 && absoluteExpiration != 1 && absoluteExpiration != 2 && absoluteExpiration != DateTime.MaxValue.ToUniversalTime().Ticks)
            {
                hint = new FixedExpiration(new DateTime(absoluteExpiration, DateTimeKind.Utc));
            }
            if (slidingExpiration != 0 && slidingExpiration != 1 && slidingExpiration != 2)
            {
                hint = new IdleExpiration(new TimeSpan(slidingExpiration));
            }
            ExpirationHint depHint = GetExpirationHintObj(dependency, false, serializationContext);

            if (depHint != null)
            {
                if (hint != null)
                {
                    if (depHint is AggregateExpirationHint)
                    {
                        ((AggregateExpirationHint)depHint).Add(hint);
                        hint = depHint;
                    }
                    else
                    {
                        hint = new AggregateExpirationHint(hint, depHint);
                    }
                }
                else
                {
                    hint = depHint;
                }
            }


            if (hint != null && resyncOnExpiration)
            {
                hint.SetBit(ExpirationHint.NEEDS_RESYNC);
            }

            return(hint);
        }
        public void Synchronize(SyncItem syncItem, DependencyStatus status)
        {
            long size = 0;

            if (SetItemStatus(syncItem, status))
            {
                switch (status)
                {
                case DependencyStatus.Expired:
                    RemoveSyncItem(syncItem, true);
                    break;

                case DependencyStatus.HasChanged:
                    if (_cache != null)
                    {
                        ulong  version = 0;
                        BitSet flag    = new BitSet();
                        //Flag information should be add while synchronizing the entry.
                        DateTime absoluteExpiration = DateTime.MaxValue.ToUniversalTime();
                        TimeSpan slidingExpiration  = TimeSpan.Zero;

                        // cache item could be fetched from client cache now.
                        string    group     = null;
                        string    subgroup  = null;
                        Hashtable queryInfo = null;

                        object updateItem = GetItemFromSyncCache(syncItem, ref version, ref flag, ref absoluteExpiration, ref slidingExpiration, ref size, ref group, ref subgroup, ref queryInfo);
                        if (updateItem != null)
                        {
                            ClusteredArrayList dependentKeys = _dependenciesKeyMap[syncItem] as ClusteredArrayList;
                            try
                            {
                                ExpirationHint expiration = null;

                                if (!DateTime.MaxValue.ToUniversalTime().Equals(absoluteExpiration))
                                {
                                    expiration = ConvHelper.MakeExpirationHint(_context.CacheRoot.Configuration.ExpirationPolicy, absoluteExpiration.Ticks, true);
                                }
                                else if (!TimeSpan.Zero.Equals(slidingExpiration))
                                {
                                    expiration = ConvHelper.MakeExpirationHint(_context.CacheRoot.Configuration.ExpirationPolicy, slidingExpiration.Ticks, false);
                                }

                                if (dependentKeys != null)
                                {
                                    foreach (object key in dependentKeys)
                                    {
                                        //TODO :Need to add expiration with time
                                        OperationContext context = new OperationContext(OperationContextFieldName.OperationType, OperationContextOperationType.CacheOperation);
                                        context.Add(OperationContextFieldName.ValueDataSize, size);

                                        BitSet flagMap = new BitSet();
                                        updateItem = _context.CachingSubSystemDataService.GetClientData(updateItem, ref flagMap, Common.Util.LanguageContext.DOTNET);



                                        _cache.Insert(key, updateItem, expiration, null, null,
                                                      null, null, null, flag, null, version,
                                                      LockAccessType.PRESERVE_VERSION, null, null, context);
                                    }
                                }

                                SetItemStatus(syncItem, DependencyStatus.Unchanged);
                            }
                            catch (Exception exception)
                            {
                                RemoveSyncItem(syncItem, true);
                            }
                        }
                    }
                    break;
                }
            }
        }
Beispiel #6
0
 /// <summary>
 /// 获取枚举值
 /// </summary>
 /// <typeparam name="TResult">返回值类型</typeparam>
 /// <param name="instance">枚举实例</param>
 /// <returns></returns>
 public static TResult Value <TResult>(this System.Enum instance)
 {
     return(ConvHelper.To <TResult>(Value(instance)));
 }
Beispiel #7
0
 public static void AsRef <T>(this TypedReference tr, Reference.RefAction <T> act)
 {
     ConvHelper <T> .Convert(tr, act);
 }