Обратные вызовы XMPP4R не работают - PullRequest
1 голос
/ 04 февраля 2010

Я использую xmpp4r и пытаюсь освоить базовую функцию чата, которую я хочу реализовать позже в своем приложении на Rails. Мои основы Ruby Threads все еще немного шатки, поэтому я был бы признателен за любую помощь в этом.

Хотя я регистрирую обратный вызов, я не получаю ответ от своей учетной записи Gmail. Я могу отправить сообщение, но моя программа ruby ​​завершается. Чтобы предотвратить его прекращение, я попытался остановить потоки в программе, но, похоже, не могу заставить его работать.

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

include Jabber

def connect
    client = Client.new(JID::new("test@gmail.com"))
    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", "test@tech.com")
 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 Ответ

0 голосов
/ 11 апреля 2010

Вместо check(client) вы можете просто использовать Thread.stop, как это делают примеры XMPP4R.

Если вы хотите увидеть, что происходит на уровне XMPP, используйте Jabber::debug = true, чтобы включитьвывод отладочной информации консоли.

...