Пример #1
0
        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);
        }
Пример #2
0
 private void TimerElapsed(object sender, ElapsedEventArgs e)
 {
     if (_localQueueProvider.HasQueued(_type))
     {
         _queue.AddEvent(_type);
     }
 }
Пример #3
0
        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);
        }