public bool Add(string key, IDnsQueryResponse response) { if (key == null) { throw new ArgumentNullException(key); } if (Enabled && response != null && !response.HasError) { var all = response.AllRecords; if (all.Any()) { double minTtl = all.Min(p => p.TimeToLive) * 1000d; if (MinimumTimout.HasValue && minTtl < MinimumTimout.Value.TotalMilliseconds) { minTtl = (long)MinimumTimout.Value.TotalMilliseconds; } if (minTtl < 1d) { return(false); } var newEntry = new ResponseEntry(response, minTtl); StartCleanup(); return(_cache.TryAdd(key, newEntry)); } } StartCleanup(); return(false); }
protected AsyncReply(ResponseEntry entry) : base(entry) { var eventName = Entry.GetString("@0"); Event = Enum.Parse <AsyncEvent>(eventName); }
private string GetObjectJson(ResponseEntry re) { JsonSerializerSettings jsseting = new JsonSerializerSettings(); jsseting.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; jsseting.ContractResolver = new CamelCasePropertyNamesContractResolver(); return(JsonConvert.SerializeObject(re, Formatting.Indented, jsseting)); }
private void Send2HotelGroup(TaskOrderModel item) { ResponseEntry re = new ResponseEntry(); re.T = "h"; re.D = item; this._groups.Send("Hotel", GetObjectJson(re)); }
private void Send2TitcketGroup(TaskOrderModel item) { ResponseEntry re = new ResponseEntry(); re.T = "k"; re.D = item; this._groups.Send("Tiket", GetObjectJson(re)); }
public bool Add(string key, IDnsQueryResponse response, bool cacheFailures = false) { if (key == null) throw new ArgumentNullException(key); if (Enabled && response != null && (cacheFailures || (!response.HasError && response.Answers.Count > 0))) { if (response.Answers.Count == 0) { // Cache entry for a failure response. var newEntry = new ResponseEntry(response, FailureEntryTimeout.TotalMilliseconds); StartCleanup(); return _cache.TryAdd(key, newEntry); } else { var all = response.AllRecords.Where(p => !(p is Protocol.Options.OptRecord)); if (all.Any()) { // in millis double minTtl = all.Min(p => p.InitialTimeToLive) * 1000d; if (MinimumTimout == Timeout.InfiniteTimeSpan) { // TODO: Log warning once? minTtl = s_maxTimeout.TotalMilliseconds; } else if (MinimumTimout.HasValue && minTtl < MinimumTimout.Value.TotalMilliseconds) { minTtl = MinimumTimout.Value.TotalMilliseconds; } // max TTL check which can limit the upper boundary if (MaximumTimeout.HasValue && MaximumTimeout != Timeout.InfiniteTimeSpan && minTtl > MaximumTimeout.Value.TotalMilliseconds) { minTtl = MaximumTimeout.Value.TotalMilliseconds; } if (minTtl < 1d) { return false; } var newEntry = new ResponseEntry(response, minTtl); StartCleanup(); return _cache.TryAdd(key, newEntry); } } } StartCleanup(); return false; }
internal static AsyncReply Parse(ResponseEntry reply) { var eventName = reply.GetString("@0"); var eventCode = Enum.Parse <AsyncEvent>(eventName); return(eventCode switch { AsyncEvent.ADDRMAP => new NewAddressMappingEvent(reply), AsyncEvent.AUTHDIR_NEWDESCS => new AuthDirNewDescsEvent(reply), AsyncEvent.BUILDTIMEOUT_SET => new BuildTimeoutSetEvent(reply), AsyncEvent.BW => new BandwidthEvent(reply), AsyncEvent.CIRC => new CircuitEvent(reply), AsyncEvent.CIRC_MINOR => new CircuitMinorEvent(reply), AsyncEvent.CLIENTS_SEEN => new ClientsSeenEvent(reply), AsyncEvent.CONF_CHANGED => new ConfChangedEvent(reply), AsyncEvent.DEBUG => new DebugLogEvent(reply), AsyncEvent.DESCCHANGED => new DescChangedEvent(reply), AsyncEvent.ERR => new ErrorLogEvent(reply), AsyncEvent.GUARD => new GuardEvent(reply), AsyncEvent.INFO => new InfoLogEvent(reply), AsyncEvent.NEWCONSENSUS => new NewConsensusEvent(reply), AsyncEvent.NEWDESC => new NewDescriptorsAvailableEvent(reply), AsyncEvent.NOTICE => new NoticeLogEvent(reply), AsyncEvent.NS => new NsEvent(reply), AsyncEvent.ORCONN => new OrConnEvent(reply), AsyncEvent.SIGNAL => new SignalEvent(reply), AsyncEvent.STATUS_CLIENT => new StatusClientEvent(reply), AsyncEvent.STATUS_GENERAL => new StatusGeneralEvent(reply), AsyncEvent.STATUS_SERVER => new StatusServerEvent(reply), AsyncEvent.STREAM => new StreamEvent(reply), AsyncEvent.STREAM_BW => new StreamBandwidthEvent(reply), AsyncEvent.WARN => new WarningLogEvent(reply), AsyncEvent.STATUS_SEVER => new StatusServerEvent(reply), AsyncEvent.TRANSPORT_LAUNCHED => new TransportLaunchedEvent(reply), AsyncEvent.CONN_BW => new ConnectionBandwidthEvent(reply), AsyncEvent.CIRC_BW => new CircuitBandwidthEvent(reply), AsyncEvent.CELL_STATS => new CellStatsEvent(reply), AsyncEvent.TB_EMPTY => new TokenBucketsEmptyEvent(reply), AsyncEvent.HS_DESC => new HiddenServiceDescriptorEvent(reply), AsyncEvent.HS_DESC_CONTENT => new HiddenServiceDescriptorContentEvent(reply), AsyncEvent.NETWORK_LIVENESS => new NetworkLivenessEvent(reply), _ => throw new ProtocolException($"Unknown Event: \"{eventCode}\".") });
internal SingleLineReply(ResponseEntry entry) { Entry = entry; }
public Response(ResponseEntry entry) { Entries = new[] { entry }; }