2

すべての連絡先リスト アイテムの存在を更新する Google トーク リスナーを実装しています。

require 'xmpp4r'
require 'xmpp4r/roster'
require 'xmpp4r/roster/helper/roster'

sender_jid = Jabber::JID.new('email')
client = Jabber::Client.new(sender_jid)
client.connect('talk.google.com')
client.auth('password')

client.send(Jabber::Presence.new.set_type(':available'))

#Presence updates:
client.add_presence_callback do |pres|
  puts pres.from.to_s.split("/")[0] unless pres.nil?
  puts pres.show.to_s.inspect unless pres.nil?
end

Thread.stop
client.close

コードは正常に動作し、スレッドは 1 つの Gmail アカウントでリッスンし続けますが、いくつかの連絡先が表示された後にこのエラーが発生します。

client.rb:33:in `stop': deadlock detected (fatal)
    from client.rb:33:in `<main>'

このエラーが表示される他のアカウントには、さまざまなステータスの連絡先が多数あります。なぜこれが起こっているのか理解できないようです。どんな助けでも素晴らしいでしょう。

ありがとう。

4

1 に答える 1

3

ロガーを通じて問題を解決しました。解析エラーが発生したため、デッドロックがスローされていました。解析できなかったキャラクターとの特定の連絡先があります。

xmpp4r はしばらく更新されていないようで、私の解決策は、一部の人が更新したリポジトリに移動することでした。

誰かが同様の問題を抱えている場合は、 https ://github.com/whitehat101/xmpp4r を確認してください。

解析は nokogiri を介して行われます。

更新: 上記の更新の多くをフォークし、その他の問題を修正した新しいメンテナーがたくさんいます: https://github.com/xmpp4r/xmpp4r

于 2013-03-27T16:53:25.217 に答える