2011-02-01 3 views
1
나는 다음과 같은 대역 내 등록을 할 xmpp4r를 사용하는 데 문제가 있었어요

하려는 SO 여기 스레드 :xmpp4r 및 Iq.new_register 대역 내 등록

XMPP transport to another protocol

을 문제는 내가 얻을에 온다 new_register에 대한 NoMethodError 예외 오류가 나는 다음과 같은 코드를 실행하면

: 파일 iq.rb의 xmpp4r 보석에서

require "xmpp4r" 
require "xmpp4r/client" 
require "xmpp4r/iq" 

def in_band_reg 

    chat_name = 'testChatName' 
    password = 'pword' 

    reg = Jabber::Iq.new_register(chat_name, password) 

end 

NoMethodError Exception: undefined method `new_register' for Jabber::Iq:Class 

을 나는로 정의 new_register 방법을 볼 수 있습니다

def Iq.new_register(username=nil, password=nil) 
     ... 
end 

하지만 클래스의 메서드를 검사 할 때 new_register 메서드를 볼 수 없습니다. I.E.

Jabber::Iq.singleton_methods(false) 
["new_authset", "new_rosterget", "new_vcard", "new_rosterset", "import", "new_authset_digest", "new_query", "add_elementclass", "new_browseget"] 

Jabber::Iq.public_instance_methods(false) 
["query=", "queryns", "set_type", "type", "typed_add", "type=", "query", "vcard"] 

Jabber::Iq.respond_to?("new_register") 
false 

'xmpp4r/iq'의 new_register 메소드에 액세스 할 수없는 이유는 무엇입니까?

답변

2

이 코드는 나 자신을 코딩하여 작동합니다.

iqr = Iq.new(:set) 
qr = IqQuery.new 
qr.add_namespace('jabber:iq:register') 
username = 'new_user' 
password = 'new_user_password' 
qr.add(REXML::Element.new('username').add_text(username)) 
qr.add(REXML::Element.new('password').add_text(password)) 
iqr.add(qr) 
client.send iqr 
+0

이 솔루션은 나에게 매우 유용하지만 스틸은 출력물을 이해하지 못하므로 설명 할 수 있습니까? –

0

어떤 xmpp4r 버전을 사용하고 있습니까? GitHub 버전을 사용해 보셨습니까?

gem sources -a http://gems.github.com (you only need to do this once!) 
gem install ln-xmpp4r 
+0

내가 생각 버전 0.5을 사용하고 대역 내 메시지를 보내

jid = JID::new('[email protected]/res') client = Client::new(jid, false) client.connect client.auth("admin_password") 

가 그 클라이언트가 새로운 사용자를 등록이 첫째 대역 새로운 사용자를 등록 할 수있는 클라이언트 연결 최신입니다. –