XMPPサーバー(Ejabberd)でユーザーごとにオンラインの友達を取得しようとしています。Ruby onRails3.2を使用しています。アイデアは、ビューページでこれを使用するためにすべてのオンラインユーザーを配列に追加することです。
非同期コード(下記)を見つけましたが、スレッドを使用しており、コントローラーメソッドで作業するのは困難です。
jid = Jabber::JID.new('user@localhost')
cl = Jabber::Client.new(jid)
cl.connect
cl.auth('123456')
@online_users = [] #online users queue
roster = Jabber::Roster::Helper.new(cl)
mainthread = Thread.current
roster.add_presence_callback { |item,oldpres,pres|
if item.online?
@online_users.push item
else
@online_users.delete_if {|x| x.jid == item.jid }
end
puts @online_users.inspect
puts "#{item.jid} - online: #{item.online?}"
}
cl.send(Jabber::Presence.new.set_show(:dnd))
t = Thread.new { sleep XMPP_REQUEST_TIMEOUT; mainthread.wakeup;}
Thread.stop
cl.close
したがって、同期コード、またはこの種のコードをコントローラーメソッドで実行する方法が必要です。
ありがとう。