Class: God::Driver
- Inherits:
-
Object
- Object
- God::Driver
- Defined in:
- lib/god/driver.rb
Instance Attribute Summary collapse
-
#thread ⇒ Object
readonly
Returns the value of attribute thread.
Instance Method Summary collapse
-
#clear_events ⇒ Object
Clear all events for this Driver.
-
#initialize(task) ⇒ Driver
constructor
Instantiate a new Driver and start the scheduler loop to handle events
task
is the Task this Driver belongs to. -
#message(name, args = []) ⇒ Object
Queue an asynchronous message
name
is the Symbol name of the operationargs
is an optional Array of arguments. -
#schedule(condition, delay = condition.interval) ⇒ Object
Create and schedule a new DriverEvent
condition
is the Conditiondelay
is the number of seconds to delay (default: interval defined in condition).
Constructor Details
#initialize(task) ⇒ Driver
Instantiate a new Driver and start the scheduler loop to handle events
+task+ is the Task this Driver belongs to
Returns Driver
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
# File 'lib/god/driver.rb', line 159 def initialize(task) @task = task @events = God::DriverEventQueue.new @thread = Thread.new do loop do begin @events.pop.handle_event rescue ThreadError => e # queue is empty break rescue Object => e = format("Unhandled exception in driver loop - (%s): %s\n%s", e.class, e., e.backtrace.join("\n")) applog(nil, :fatal, ) end end end end |
Instance Attribute Details
#thread ⇒ Object (readonly)
Returns the value of attribute thread.
153 154 155 |
# File 'lib/god/driver.rb', line 153 def thread @thread end |
Instance Method Details
#clear_events ⇒ Object
Clear all events for this Driver
Returns nothing
182 183 184 |
# File 'lib/god/driver.rb', line 182 def clear_events @events.clear end |
#message(name, args = []) ⇒ Object
Queue an asynchronous message
+name+ is the Symbol name of the operation
+args+ is an optional Array of arguments
Returns nothing
191 192 193 |
# File 'lib/god/driver.rb', line 191 def (name, args = []) @events.push(DriverOperation.new(@task, name, args)) end |
#schedule(condition, delay = condition.interval) ⇒ Object
Create and schedule a new DriverEvent
+condition+ is the Condition
+delay+ is the number of seconds to delay (default: interval defined in condition)
Returns nothing
200 201 202 203 204 |
# File 'lib/god/driver.rb', line 200 def schedule(condition, delay = condition.interval) applog(nil, :debug, "driver schedule #{condition} in #{delay} seconds") @events.push(DriverEvent.new(delay, @task, condition)) end |