xmpp4r 如何上线,收消息

这是一个简单的例子,如何上线和收消息,假设用户test/123,登录本机。

    jid=Jabber::JID.new("test@magicgod-laptop/xmpp4r")
    j=Jabber::Client.new(jid)
    j.connect("localhost")
    j.auth("123")
    j.send(Jabber::Presence.new(:chat,"ok"))
    debug_log("conn:#{j.respond_to?(:is_connected?) && j.is_connected?}") 
    
    exit=false
    j.add_message_callback do |m|    
      debug_log("message:#{m.body} type:#{m.type} m:#{m}")
      if m.body!=nil && !m.body.empty?
        exit=true
      end
    end    
    while ! exit do
      sleep(5)
      debug_log("sleep exit:#{exit}") 
    end

    debug_log("disconnect") 
    j.close


这几句是登录,非常简单。connect后面的服务器要选最快的,比如:localhost要比机器名快。
    jid=Jabber::JID.new("test@magicgod-laptop/xmpp4r")
    j=Jabber::Client.new(jid)
    j.connect("localhost")
    j.auth("123")


这是上线,:chat就是说明自己可以谈话了,还有:away, :dnd, :xa,也可以是nil,但是似乎在opefire要用:chat。
    j.send(Jabber::Presence.new(:chat,"ok"))


加一个callback,有消息来就会调用,里面没做什么事,只是打印一下,然后设一个退出标志。
    j.add_message_callback do |m|    
      debug_log("message:#{m.body} type:#{m.type} m:#{m}")
      if m.body!=nil && !m.body.empty?
        exit=true
      end
    end    


等待,为了防止CPU占用,sleep一下。
    while ! exit do
      sleep(5)
      debug_log("sleep exit:#{exit}") 
    end


接收消息是一个典型的异步模式,使用一个callback来处理。

xmpp4r-simple试用了一下,觉得确实是简化了,它使用一个queue来处理消息,上线之类的,如果要求不高可以用这个API,更简单一点。

你可能感兴趣的:(J#,Ruby)