コード例 #1
0
        public override void  ExecuteCommand(ClientManager clientManager, Common.Protobuf.Command command)
        {
            CommandInfo commandInfo;

            try
            {
                commandInfo = ParseCommand(command);
            }
            catch (Exception exc)
            {
                if (!base.immatureId.Equals("-2"))
                {
                    //_resultPacket = clientManager.ReplyPacket(base.ExceptionPacket(exc, base.immatureId), base.ParsingExceptionMessage(exc));
                    //_resultPacket = Alachisoft.NCache.Common.Util.ResponseHelper.SerializeExceptionResponse(exc, command.requestID);
                    _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeExceptionResponse(exc, command.requestID, command.commandID));
                }
                return;
            }
            NCache nCache = clientManager.CmdExecuter as NCache;
            Cache  cache  = nCache.Cache;

            Alachisoft.NCache.Config.Dom.ExpirationPolicy policy = null;
            policy = cache.Configuration.ExpirationPolicy;
            Alachisoft.NCache.Common.Protobuf.Response response = new Alachisoft.NCache.Common.Protobuf.Response();
            Alachisoft.NCache.Common.Protobuf.GetExpirationResponse getExpirationResponse = new Alachisoft.NCache.Common.Protobuf.GetExpirationResponse();
            getExpirationResponse.absDefault        = policy.AbsoluteExpiration.Default;
            getExpirationResponse.absDefaultEnabled = policy.AbsoluteExpiration.DefaultEnabled;
            getExpirationResponse.sldDefault        = policy.SlidingExpiration.Default;
            getExpirationResponse.sldDefaultEnabled = policy.SlidingExpiration.DefaultEnabled;
            getExpirationResponse.absLonger         = policy.AbsoluteExpiration.Longer;
            getExpirationResponse.absLongerEnabled  = policy.AbsoluteExpiration.LongerEnabled;
            getExpirationResponse.sldLonger         = policy.SlidingExpiration.Longer;
            getExpirationResponse.sldLongerEnabled  = policy.SlidingExpiration.LongerEnabled;
            response.getExpirationResponse          = getExpirationResponse;
            response.requestId    = Convert.ToInt64(commandInfo.requestId);
            response.commandID    = command.commandID;
            response.responseType = Alachisoft.NCache.Common.Protobuf.Response.Type.EXPIRATION_RESPONSE;

            //PROTOBUF:RESPONSE
            //_resultPacket = clientManager.ReplyPacket("GETCOMPACTTYPESRESULT \"" + cmdInfo.RequestId + "\"" + compactTypesString + "\"", new byte[0]);

            //_resultPacket = Alachisoft.NCache.Common.Util.ResponseHelper.SerializeResponse(response);

            _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeResponse(response));
        }
コード例 #2
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);
        }