Class: Msngr::Messenger
- Inherits:
-
Object
- Object
- Msngr::Messenger
- Defined in:
- lib/msngr/messenger.rb
Instance Attribute Summary collapse
-
#client ⇒ Msngr::Clients::*
readonly
A client object interface to receive messages from.
-
#receivers ⇒ Array<Receiver>
readonly
An Array of Receiver objects to dispatch callbacks/messages to.
Instance Method Summary collapse
-
#initialize(client) ⇒ Receiver
constructor
Initializes a new Messenger.
-
#listen! ⇒ Object
Listens on a new thread.
-
#subscribe(pattern) ⇒ Receiver
Creates and returns a new Receiver and adds it to @receivers so it’ll receive messages matching the provided pattern.
-
#unsubscribe(receiver) ⇒ Object
Removes the Receiver from @receivers and invokes the receiver’s.
Constructor Details
#initialize(client) ⇒ Receiver
Initializes a new Messenger.
22 23 24 25 26 |
# File 'lib/msngr/messenger.rb', line 22 def initialize(client) @client = client @receivers = [] @mutex = Mutex.new end |
Instance Attribute Details
#client ⇒ Msngr::Clients::* (readonly)
A client object interface to receive messages from.
9 10 11 |
# File 'lib/msngr/messenger.rb', line 9 def client @client end |
#receivers ⇒ Array<Receiver> (readonly)
An Array of Receiver objects to dispatch callbacks/messages to.
15 16 17 |
# File 'lib/msngr/messenger.rb', line 15 def receivers @receivers end |
Instance Method Details
#listen! ⇒ Object
Listens on a new thread. Will auto-restart when crashed in an attempt to recover from exceptions.
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/msngr/messenger.rb', line 53 def listen! Thread.new do loop do begin listen rescue => e puts "Messenger error occurred:" puts "#{e.class.name}" puts "#{e.backtrace.join("\n")}" puts "Restarting.." sleep 1 end end end end |
#subscribe(pattern) ⇒ Receiver
Creates and returns a new Receiver and adds it to @receivers so it’ll receive messages matching the provided pattern.
34 35 36 37 38 |
# File 'lib/msngr/messenger.rb', line 34 def subscribe(pattern) Msngr::Receiver.new(pattern).tap do |receiver| @mutex.synchronize { @receivers << receiver } end end |
#unsubscribe(receiver) ⇒ Object
Removes the Receiver from @receivers and invokes the receiver’s
45 46 47 48 |
# File 'lib/msngr/messenger.rb', line 45 def unsubscribe(receiver) @mutex.synchronize { @receivers.delete(receiver) } dispatch(receiver.on_unsubscribe_callbacks, self) end |