Class | Jabber::Discovery::Responder |
In: |
lib/xmpp4r/discovery/helper/responder.rb
|
Parent: | Object |
Responds to Service Discovery queries on a given node
Modify returned elements by these attributes:
CALLBACK_PRIORITY | = | 180 |
features | [RW] |
Features returned on Discovery Info query,
Array of [Discovery::Feature] |
forms | [RW] |
Forms returned on Discovery Info query
(such as Software Information)
Array of [Dataforms::XData] |
identities | [RW] |
Identities returned on Discovery Info query
Array of [Discovery::Identity] |
items | [RW] |
Children returned on Discovery Item query
May contain other Discovery::Responder instances which will generate an item dynamically from their first identity Array of [Discovery::Item] or [Discovery::Responder] (mixed) |
my_jid | [RW] | Set the JID this helper feels responsible for (default: nil, responsible for any JID) |
node | [R] | Service Discovery node this Responder is responsible for (will not answer queries for other nodes) |
Initialize responder for a specific node
stream: | [Jabber::Stream] |
node: | [nil] or [String] |
# File lib/xmpp4r/discovery/helper/responder.rb, line 64 64: def initialize(stream, node=nil, identities=[], features=[], items=[]) 65: @stream = stream 66: @my_jid = nil 67: @node = node 68: @identities = identities 69: @features = [] 70: add_features(features) 71: @forms = [] 72: @items = items 73: 74: @stream.add_iq_callback(CALLBACK_PRIORITY, self) do |iq| 75: my_nodes = [@node, "#{@node}##{generate_ver}"] 76: 77: if iq.type == :get and 78: iq.query.kind_of? IqQueryDiscoInfo and 79: my_nodes.include?(iq.query.node) 80: 81: answer = iq.answer(false) 82: answer.type = :result 83: query = answer.add(IqQueryDiscoInfo.new) 84: query.node = iq.query.node 85: (@identities + @features + @forms).each do |element| 86: query.add(element) 87: end 88: @stream.send(answer) 89: 90: true # handled 91: 92: elsif iq.type == :get and 93: iq.query.kind_of? IqQueryDiscoItems and 94: my_nodes.include?(iq.query.node) 95: 96: answer = iq.answer(false) 97: answer.type = :result 98: query = answer.add(IqQueryDiscoItems.new) 99: query.node = iq.query.node 100: @items.each do |item| 101: if item.kind_of? Responder 102: query.add(item.generate_item) 103: else 104: query.add(item) 105: end 106: end 107: @stream.send(answer) 108: 109: true # handled 110: 111: else 112: false # not handled 113: end 114: end 115: end
Add a feature
feature: | [Jabber::Discovery::Feature] or [String] |
# File lib/xmpp4r/discovery/helper/responder.rb, line 120 120: def add_feature(feature) 121: if feature.kind_of? Feature 122: @features << feature 123: else 124: @features << Feature.new(feature.to_s) 125: end 126: end
Add a series of features
features: | Array of [Jabber::Discovery::Feature] or [String] |
# File lib/xmpp4r/discovery/helper/responder.rb, line 131 131: def add_features(features) 132: features.each { |feature| 133: add_feature(feature) 134: } 135: end
Generate an item for inclusion in items discovery in other responders
return: | [Discovery::Item] or nil |
# File lib/xmpp4r/discovery/helper/responder.rb, line 149 149: def generate_item 150: i = @identities.first 151: if i 152: Item.new(@my_jid || @stream.jid, i.iname, @node) 153: else 154: nil 155: end 156: end