Ruft die Liste der Räume ab, in denen sich der Client gerade befindet, beim Trennen des Ereignisses

7

Ich versuche, die Liste der Räume zu finden, in denen sich ein Client gerade befindet, um das Ereignis zu trennen (schließt die Browser / Neuladen der Seite / Internetverbindung wurde gelöscht).

Ich brauche es aus dem folgenden Grund: Der Benutzer hat einige Räume betreten. Dann haben andere Leute das Gleiche getan. Dann schließt er einen Browser Tab. Und ich möchte alle Leute in den Räumen, in denen er ist, benachrichtigen, dass er gegangen ist.

Ich muss also etwas innerhalb des 'disconnect' Ereignisses tun.

%Vor%

Ich habe bereits zwei Ansätze ausprobiert und festgestellt, dass beide falsch liegen:

1) durch adapter.rooms iterieren.

%Vor%

Das ist falsch, weil Adapterräume alle Räume haben. Nicht nur die Zimmer, in denen mein Kunde ist.

2) Durch client.rooms gehen. Dies gibt eine korrekte Liste von Räumen zurück, in denen sich der Client befindet, aber keine Verbindung zum Ereignis disconnect. Beim Trennen ist diese Liste bereits leer [] .

Wie kann ich das machen? Ich verwende zum Zeitpunkt des Schreibens das neueste socket.io: 1.1.0

    
Salvador Dali 14.09.2014, 05:36
quelle

2 Antworten

16

Dies ist standardmäßig nicht möglich. Sehen Sie sich den Quellcode von socket.io an.

Dort haben Sie die Methode Socket.prototype.onclose , die vor dem socket.on('disconnect',..) Callback ausgeführt wird. Also sind alle Räume davor.

%Vor%

Eine Lösung könnte sein, entweder den Bibliothekscode socket.js zu hacken oder diese Methode zu überschreiben und dann die ursprüngliche aufzurufen. Ich habe es ziemlich schnell getestet, es scheint zu funktionieren:

%Vor%     
DerM 16.09.2014, 08:37
quelle
5

Ich weiß, es ist eine alte Frage, aber in der aktuellen Version von socket.io gibt es ein Ereignis, das vor der Trennung ausgeführt wird. Sie können auf die Liste der Räume zugreifen, denen er beigetreten ist.

%Vor%

Ссылка

    
André Morales 12.10.2016 17:43
quelle