Class: Jabber::Version::Responder
- Inherits:
-
Object
- Object
- Jabber::Version::Responder
- Defined in:
- lib/xmpp4r/version/helper/responder.rb
Overview
A class to answer version requests using IqQueryVersion
If you don't need the flexibility of dynamic responses with the callback you can register with add_version_callback, take a look at SimpleResponder
Direct Known Subclasses
Instance Method Summary collapse
-
#add_version_callback(priority = 0, ref = nil, &block) ⇒ Object
Add a callback for Iq stanzas with IqQueryVersion.
-
#initialize(stream) ⇒ Responder
constructor
Initialize a new version responder.
-
#iq_callback(iq) ⇒ Object
callback handler to answer Software Version queries (registered by constructor and used internally only).
Constructor Details
#initialize(stream) ⇒ Responder
Initialize a new version responder
Registers it's callback (prio = 180, ref = self)
- stream
[Stream] Where to register callback handlers
22 23 24 25 26 27 28 29 |
# File 'lib/xmpp4r/version/helper/responder.rb', line 22 def initialize(stream) @stream = stream @versioncbs = CallbackList.new stream.add_iq_callback(180, self) { |iq| iq_callback(iq) } end |
Instance Method Details
#add_version_callback(priority = 0, ref = nil, &block) ⇒ Object
Add a callback for Iq stanzas with IqQueryVersion
First argument passed to block is the Iq stanza, second argument is a block, which can be called with software name, version and os
Example:
my_version_helper.add_version_callback { |iq,block|
block.call('Cool client', '6.0', 'Cool OS')
}
42 43 44 |
# File 'lib/xmpp4r/version/helper/responder.rb', line 42 def add_version_callback(priority = 0, ref = nil, &block) @versioncbs.add(priority, ref, block) end |
#iq_callback(iq) ⇒ Object
Used internally
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/xmpp4r/version/helper/responder.rb', line 51 def iq_callback(iq) if iq.type == :get if iq.query.kind_of?(IqQueryVersion) replyblock = lambda { |name,version,os| answer = iq.answer answer.type = :result answer.query.set_iname(name).set_version(version).set_os(os) @stream.send(answer) true } @versioncbs.process(iq, replyblock) else false end else false end end |