我正在尝试通过 XMPP 服务器(Ejabberd)中的用户获取在线朋友。我正在使用 Ruby on Rails 3.2。这个想法是在数组中添加所有在线用户以在视图页面上使用它。
我找到了异步代码(如下),但它使用 Thread 并且很难使用控制器方法。
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
所以我需要一些同步代码,或者在控制器方法中执行这种代码的某种方式。
谢谢。