I definiert eine Hilfsmethode:
app/Kanäle/application_cable/channel.rb
module ApplicationCable
class Channel < ActionCable::Channel::Base
def connections_info
connections_array = []
connection.server.connections.each do |conn|
conn_hash = {}
conn_hash[:current_user] = conn.current_user
conn_hash[:subscriptions_identifiers] = conn.subscriptions.identifiers.map {|k| JSON.parse k}
connections_array << conn_hash
end
connections_array
end
end
end
Jetzt können Sie connections_info
eine beliebige Stelle innerhalb der abgeleiteten Kanal anrufen. Die Methode gibt ein Informationsarray mit Daten über alle verfügbaren Server-Socket-Verbindungen, ihre jeweiligen current_user
s und alle ihre aktuellen Abonnements zurück. Hier
ist ein Beispiel für meine Daten connections_info
Rückkehr:
[1] pry(#<ChatChannel>)> connections_info
=> [{:current_user=>"D8pg2frw5db9PyHzE6Aj8LRf",
:subscriptions_identifiers=>
[{"channel"=>"ChatChannel",
"secret_chat_token"=>"f5a6722dfe04fc883b59922bc99aef4b5ac266af"},
{"channel"=>"AppearanceChannel"}]},
{:current_user=>
#<User id: 2, email: "[email protected]", created_at: "2017-03-27 13:22:14", updated_at: "2017-04-28 11:13:37", provider: "email", uid: "[email protected]", first_name: "John", active: nil, last_name: nil, middle_name: nil, email_public: nil, phone: nil, experience: nil, qualification: nil, price: nil, university: nil, faculty: nil, dob_issue: nil, work: nil, staff: nil, dob: nil, balance: nil, online: true>,
:subscriptions_identifiers=>
[{"channel"=>"ChatChannel",
"secret_chat_token"=>"f5a6722dfe04fc883b59922bc99aef4b5ac266af"}]}]
Sie können dann analysieren diese Struktur, wie Sie wollen und die gewünschten Daten extrahieren. Sie können Ihre eigene Verbindung in dieser Liste durch dieselbe current_user
unterscheiden (die current_user
Methode ist in class Channel < ActionCable::Channel::Base
verfügbar).
Wenn ein Benutzer zweimal (oder öfter) eine Verbindung herstellt, werden die entsprechenden Array-Elemente nur verdoppelt.
Es gibt vielleicht einige andere Wege oder Ereignis Ruby ist es ein erster Gedanke;). – plombix
Ich versuche gerade, es direkt in Kaffee-Datei zu tun, ich werde hier Lösung posten, wenn es funktioniert – plombix