2010-02-04 6 views
1

xmpp4r을 사용하고 나중에 내 Rails 앱에서 구현하고자하는 기본 채팅 기능의 중단을 시도하고 있습니다. Ruby Threads에 대한 내 기본 사항은 여전히 ​​불안정하기 때문에 이에 대한 도움을 주시면 감사하겠습니다.XMPP4R 콜백이 작동하지 않는 것 같습니다.

콜백을 등록해도 내 Gmail 계정의 응답을받지 못합니다. 메시지를 보낼 수 있지만 루비 프로그램이 종료됩니다. 종료를 방지하기 위해 프로그램의 스레드를 막으려 고했지만 스레드가 작동하지 않는 것 같습니다.

require 'rubygems' 
require "xmpp4r/client" 
require "xmpp4r/roster" 

include Jabber 

def connect 
    client = Client.new(JID::new("[email protected]")) 
    client.connect 
    client.auth("test") 
    client.send(Presence.new.set_type(:available)) 
    client 
end 

def create_message(message, to_email) 

    msg = Jabber::Message::new(to_email, message) 
    msg.type = :chat 
    msg 
end 

def subscribe(email_id) 
    pres = Presence.new.set_type(:subscribe).set_to(email_id) 
    pres 
end 

client = connect 

roster = Roster::Helper.new(client) 
    roster.add_subscription_request_callback do |item,pres| 
    roster.accept_subscription(pres.from) 
end 


def create_callback(client) 
    $t4= Thread.new do 
      client.add_message_callback do |m| 
        puts m.body 
        puts "................................Callback working" 
      end 
    end 

end 



    puts "Client has connected" 
msg = create_message("Welcome to the winter of my discontent", "[email protected]") 
client.send(msg) 
create_callback(client) 
def check(client) 
     $t3 = Thread.new do 
      loop do 

        puts "t3 still running........." 
        Thread.current.stop 
        $t4.join 
        end 
      end 
end 

check(client) 

답변

-1

대신 check(client) 물건 그냥 예 수행 XMPP4R처럼 Thread.stop를 사용할 수 있습니다.

XMPP 수준에서 진행되는 작업을 보려면 Jabber::debug = true을 사용하여 콘솔 디버그 출력을 사용하도록 설정하십시오.

관련 문제