Class: FrugalTimeout::RequestQueue

Inherits:
Object
  • Object
show all
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

Hookable::DO_NOTHING

Instance Method Summary collapse

Methods included from Hookable

#def_hook, #def_hook_synced

Constructor Details

#initializeRequestQueue

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

#enforceExpiredObject



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

#sizeObject



106
107
108
# File 'lib/frugal_timeout.rb', line 106

def size
  synchronize { @requests.size }
end