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
taskis the Task this Driver belongs to. -
#message(name, args = []) ⇒ Object
Queue an asynchronous message
nameis the Symbol name of the operationargsis an optional Array of arguments. -
#schedule(condition, delay = condition.interval) ⇒ Object
Create and schedule a new DriverEvent
conditionis the Conditiondelayis 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
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
# File 'lib/god/driver.rb', line 158 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 Exception => 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.
152 153 154 |
# File 'lib/god/driver.rb', line 152 def thread @thread end |
Instance Method Details
#clear_events ⇒ Object
Clear all events for this Driver
Returns nothing
181 182 183 |
# File 'lib/god/driver.rb', line 181 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
190 191 192 |
# File 'lib/god/driver.rb', line 190 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
199 200 201 202 203 |
# File 'lib/god/driver.rb', line 199 def schedule(condition, delay = condition.interval) applog(nil, :debug, "driver schedule #{condition} in #{delay} seconds") @events.push(DriverEvent.new(delay, @task, condition)) end |