openfire插件开发续二

时间:2022-05-08 14:44:23

好吧,因为要测试,所以,需要用xmpp4r写一些测试代码, 也能更深入的了解xmpp的协议


1, 如何加入一个群组

       xmpp4r 群组定义的类是 MUCClient.rb,位于 'xmpp4r/muc/helper/mucclient'  当然,它的子类 simplemuclient更强大,可以使用它。
      1.1 先连接xmpp server

    

server_str = get_jid #用户名@服务器地址/资源号(资源号可以任意设定)
jid = JID::new(server_str)
password = APPCONFIG[:password]
cl = Client::new(jid)
cl.connect
cl.auth(password)

   1.2 初始化Muc

m = Jabber::MUC::MUCClient.new(cl)

   1.3  加入群组并且发送消息

gm = Message.new(nil, "group chat").set_type(:groupchat)
m.send gm, false

Message需要设置type 为 groupchat,  send方法的to 应该为false

   1.4 补充说明,引入的类

require 'xmpp4r'
require 'xmpp4r/client'
require 'xmpp4r/roster/iq/roster'
require 'xmpp4r/muc/helper/simplemucclient'
require 'xmpp4r/muc/helper/mucclient'
include Jabber

如下是我的 muc的定义

def get_group_jid
  "song@conference.192.168.1.126/ruby"
end

这样有一个小的问题, ruby 是群组中用户的昵称,应该使用 from_user


##################2012-4-13 补充##################################################

1. 5 如何向 群组 发送 iq 字节?
现在有一个需求,用户A在 房间里(muc)发一件礼物给指定的用户B,改如何实现?
我先前的打算是 发送iq 节,但是group如何发送iq节点呢?
先看如下一段代码,

bs = Jabber::MUC::MUCBrowser.new(cl)
rooms = bs.muc_rooms(APPCONFIG[:jid])
sleep 3
puts rooms.inspect


这段代码是向服务器查询,现在正有多少个房间

发送的xml文件如下

<iq from='tester001@192.168.1.126/testing' id='3743' to='conference.192.168.1.126' type='get'><query xmlns='http://jabber.org/protocol/disco#items'/></iq>