Class: FrugalTimeout::RequestQueue
- Inherits:
-
Object
- Object
- FrugalTimeout::RequestQueue
- Includes:
- Hookable, MonitorMixin
- Defined in:
- lib/frugal_timeout.rb
Overview
{{{1 RequestQueue Contains sorted requests to be processed. Calls @onNewNearestRequest when another request becomes the first in line. Calls @onEnforce when expired requests are removed and enforced.
#queue adds requests. #enforceExpired removes and enforces requests.
Constant Summary
Constants included from Hookable
Instance Method Summary collapse
- #enforceExpired ⇒ Object
-
#initialize ⇒ RequestQueue
constructor
A new instance of RequestQueue.
- #queue(sec, klass) ⇒ Object
- #size ⇒ Object
Methods included from Hookable
Constructor Details
#initialize ⇒ RequestQueue
Returns a new instance of RequestQueue.
91 92 93 94 95 96 97 98 |
# File 'lib/frugal_timeout.rb', line 91 def initialize super def_hook_synced :onEnforce, :onNewNearestRequest @requests, @threadIdx = SortedQueue.new, Storage.new @requests.on_add { |r| @threadIdx.set r.thread, r } @requests.on_remove { |r| @threadIdx.delete r.thread, r } end |
Instance Method Details
#enforceExpired ⇒ Object
100 101 102 103 104 |
# File 'lib/frugal_timeout.rb', line 100 def enforceExpired synchronize { purgeAndEnforceExpired && sendNearestActive } end |
#queue(sec, klass) ⇒ Object
110 111 112 113 114 115 116 117 118 |
# File 'lib/frugal_timeout.rb', line 110 def queue sec, klass request = Request.new(Thread.current, MonotonicTime.now + sec, klass) synchronize { @requests.push(request) { @onNewNearestRequest.call request } } request end |
#size ⇒ Object
106 107 108 |
# File 'lib/frugal_timeout.rb', line 106 def size synchronize { @requests.size } end |