xmpp中取好友状态

magicgod 2008-03-16
为了把状态变更发为博客文章,需要知道好友状态。

监视了一下来往的xml,选中了presence回调方法。

监视很简单:
    j.add_xml_callback do |x|
      debug_log("xml: #{x}")
      false
    end


注意最后要返回false,这样就表示允许后面的回调处理,比如message, presence之类的。

加入presence的回调
    j.add_presence_callback do |presence|  
      begin
       #Robot.debug_log("presence: #{presence}")
       if presence!=nil && presence.from!=nil && presence.status!=nil && !presence.status.empty?
          email=Robot.split_email(presence.from)
          process_status(presence.status,email)
        end
      rescue => detail
        Robot.exception_log("process status error:",detail)
      end
    end


回调的参数非常简单就是一个对象presence, 是这个类:Jabber::Presence。具体参见:http://home.gna.org/xmpp4r/rdoc/classes/Jabber/Presence.html

里面的status属性就是好友发来的状态文本。

当然要处理的过程中要比较一下是否与原来的状态不同,另外忽略掉空状态,有些客户端是不发送状态的。

使用xmpp4r,已经在gtalk和openfire里试过了,可以正常使用。