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)); }
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); }