Class: ShortBus::Driver
- Inherits:
-
Object
- Object
- ShortBus::Driver
- Includes:
- DebugMessage
- Defined in:
- lib/short_bus/driver.rb
Overview
ShorBus::Driver is the message dispatcher.
Instance Attribute Summary collapse
-
#debug ⇒ Object
Returns the value of attribute debug.
-
#services ⇒ Object
readonly
Returns the value of attribute services.
Instance Method Summary collapse
-
#initialize(*options) ⇒ Driver
constructor
Example:.
- #publish(arg, publisher = nil) ⇒ Object (also: #<<)
-
#subscribe(*args, &block) ⇒ ShortBus::Service
Subscribes a callback (lamba, block, method) to receive messages.
- #unsubscribe(service) ⇒ Object
Methods included from DebugMessage
Constructor Details
#initialize(*options) ⇒ Driver
Example:
Arguments:
options: hash
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/short_bus/driver.rb', line 17 def initialize(*) = { debug: false, default_message_spec: nil, default_publisher_spec: nil, default_thread_count: 1, max_message_queue_size: 1_000_000 } .merge! [0] if [0].is_a?(Hash) @debug = [:debug] = SizedQueue.new([:max_message_queue_size]) @services = {} @threads = { message_router: } end |
Instance Attribute Details
#debug ⇒ Object
Returns the value of attribute debug.
11 12 13 |
# File 'lib/short_bus/driver.rb', line 11 def debug @debug end |
#services ⇒ Object (readonly)
Returns the value of attribute services.
10 11 12 |
# File 'lib/short_bus/driver.rb', line 10 def services @services end |
Instance Method Details
#publish(arg, publisher = nil) ⇒ Object Also known as: <<
55 56 57 58 59 60 |
# File 'lib/short_bus/driver.rb', line 55 def publish(arg, publisher = nil) return unless ( = arg) .publisher = publisher if publisher .push end |
#subscribe(*args, &block) ⇒ ShortBus::Service
Subscribes a callback (lamba, block, method) to receive messages
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/short_bus/driver.rb', line 38 def subscribe(*args, &block) service_args = { debug: @debug, driver: self, message_spec: [:default_message_spec], name: nil, publisher_spec: [:default_publisher_spec], service: nil, thread_count: [:default_thread_count] }.merge args[0].is_a?(Hash) ? args[0] : { service: args[0] } service_args[:service] = block.to_proc if block_given? ("#subscribe service: #{service_args[:service]}") service = Service.new(service_args) @services[service.to_s] = service end |
#unsubscribe(service) ⇒ Object
64 65 66 67 68 69 70 71 |
# File 'lib/short_bus/driver.rb', line 64 def unsubscribe(service) if service.is_a? ShortBus::Service unsubscribe service.to_s elsif @services.key?(service) @services[service].stop @services.delete service end end |