2010-02-04 23 views
1

Im utilisant xmpp4r et essayant d'obtenir le coup d'une fonction de base de causerie que je souhaite implémenter plus tard dans mon application de Rails. Mes bases sur Ruby Threads sont encore un peu tremblantes alors j'apprécierais toute aide à ce sujet.Les rappels de XMPP4R ne semblent pas fonctionner

Bien que j'inscris le rappel, je ne reçois pas de réponse de mon compte Gmail. Je suis capable d'envoyer un message, mais mon programme ruby ​​se termine. Afin de l'empêcher de se terminer, j'ai essayé d'arrêter les discussions dans le programme, mais je n'arrive pas à le faire fonctionner.

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) 

Répondre

-1

Au lieu des choses check(client) vous pouvez simplement utiliser Thread.stop comme les exemples XMPP4R font.

Si vous souhaitez voir ce qui se passe au niveau XMPP, utilisez Jabber::debug = true pour activer la sortie de débogage de la console.