public bool AddEvent(Type data, bool flush = false) { var sendEvent = false; if (flush) { sendEvent = _queueEvent.AddEvent(data); } else { var cfg = _config.Get(data); if (cfg.TriggerCount <= 0) { sendEvent = _queueEvent.AddEvent(data); } else { var cur = DateTime.Now; var upd = _lastUpdateds.GetOrAdd(data, p => cur); var delta = cur - upd; var isNew = delta == TimeSpan.Zero; if (isNew || delta > cfg.AwaitTimePeriod) { if (isNew) { sendEvent = _queueEvent.AddEvent(data); } else { delta = DateTime.Now - upd; if (delta <= cfg.AwaitTimePeriod) { sendEvent = _queueEvent.AddEvent(data); } _lastUpdateds.TryRemove(data, out _); } } } } return(sendEvent); }
private void TimerElapsed(object sender, ElapsedEventArgs e) { if (_localQueueProvider.HasQueued(_type)) { _queue.AddEvent(_type); } }
public int Send <TData>(TData data) { var triggerCount = _batchConfig.Get <TData>().TriggerCount; var queueCount = _queue.Enqueue(data); if (triggerCount > 0) { var res = triggerCount - queueCount; if (res <= 0) { _queueEvent.AddEvent(data.GetType()); } } return(queueCount); }