I could not find an example anywhere for using data forms with xmpp4r pubsub feature. Here’s a working example. Note that I included only the publishing site of it since I’m using javascript for the subscribers.
#!/usr/bin/ruby
require 'rubygems'
require 'xmpp4r'
require "xmpp4r/pubsub"
require "xmpp4r/dataforms"
require "xmpp4r/pubsub/helper/servicehelper.rb"
require "xmpp4r/pubsub/helper/nodebrowser.rb"
require "xmpp4r/pubsub/helper/nodehelper.rb"
include Jabber
JID='smpallen99@xmpp'
PASSWD='test123'
SERVICE='pubsub.xmpp'
NODE='xmpp/ahearsion'
Jabber::debug = true
cl = Jabber::Client.new(Jabber::JID.new(JID))
puts "Connecting"
cl.connect
cl.auth(PASSWD)
cl.send(Jabber::Presence.new.set_priority(-1))
pubsub = PubSub::ServiceHelper.new(cl, SERVICE)
def create_node(pubsub)
pubsub.create_node(NODE)
end
def publish(action, user, pubsub)
item = Jabber::PubSub::Item.new
fa = Jabber::Dataforms::XDataField.new("action")
fa.value = action
fu = Jabber::Dataforms::XDataField.new("user")
fu.value = user
df = Jabber::Dataforms::XData.new :result
df.add(fa)
df.add(fu)
item.add(df)
pubsub.publish_item_to(NODE, item)
end
cont = true
while cont
puts "Enter your command (a |d |c|q) "
input = gets
tokens = input.split(" ")
case tokens.first
when "a"
user = tokens[1]
publish("activate", user, pubsub)
puts "Activated #{user}\n"
when "d"
user = tokens[1]
publish("deactivate", user, pubsub)
puts "Deactivated #{user}\n"
when "q"
cont = false
puts "quitting...\n"
when "c"
puts "Creating node...\n"
create_node(pubsub)
else
puts "Don't understand command #{tokens.first}\n"
end
end
cl.close