2016-07-26 7 views
0

So habe ich Chat-App, in der nur zwei Benutzer in einem Raum gleichzeitig sein können.node.js socket.io App - Wie man jemanden aus dem Chat-Raum kickt?

Bitte beachten Sie, dass clientInfo eine globale Variable ist und jedes Mal, wenn ein neuer Benutzer einem Raum beitritt, wird eine Objektvariable an den Server mit Benutzername und Raumname übergeben. Dann wird dieser Code

ausgeführt
socket.on('joinRoom', function(userDetails){ 

    clientInfo[socket.id] = userDetails; //variable contains name and room joined. 
    socket.join(userDetails.room); 
} 

ich eine Funktion hinzugefügt, wo ein Benutzer ‚Kick‘ als Chatnachricht eingeben können, die diese Funktion aufrufen wird:

function kickUser(socket){   

    socket.leave(clientInfo[socket.id].room); 
    delete clientInfo[socket.id]; 

} 

der obige Code funktioniert gut, aber wie kann ich Ändern Sie die Funktion, um den anderen Benutzer im Raum zu treten? Ich habe den Code unten ausprobiert, aber am Ende habe ich mich selbst rausgeworfen. Ich nehme an, dass socket.leave() sich nicht um die Socket-ID kümmert, sondern nur den Raumnamen und die Person, die die Funktion aufgerufen hat.

function kickUser(socket){ 

    var info = clientInfo[socket.id]; 

    if (typeof info == 'undefined'){  
    return; 
    } 

    Object.keys(clientInfo).forEach(function(socketId){   
    if(info.room == clientInfo[socketId].room) { 
     if (info.name != clientInfo[socketId].name){   
      socket.leave(clientInfo[socketId].room); 
      delete clientInfo[socketId]; 
     } 
     } 
    }); 
} 
+0

Möchten Sie, dass jeder Benutzer einen anderen Benutzer und selbst treten kann? Oder brauchst du kick user by server (= admin)? –

+0

Ich denke, meine Antwort wäre ja auf beide Fragen. Ich möchte im Grunde wählen können, welche der beiden Benutzer ich herauswerfen möchte. Wenn jetzt jemand versucht, jemanden rauszuschmeißen, wird dieser Jemand er selbst sein. – Jay

Antwort

0

Versuchen nächste Idee


Sie identifizieren müssen Benutzernamen und ein Raum für diese Verbindung/socket In socket.on('connection', function(socket){ ... }); implementieren: auf Verbindung senden Benutzername/Raum-Client kann sich

socket.on('connect', function { 
    socket.send(JSON.stringify{do: "introduce", name: "User1", room: "dasRoom"}) 
}) 

oder Server kann es in client cookie lesen. Sie können hier auch die Anzahl der Benutzer im Zimmer überprüfen. Diese Information kann in globalen Variablen gespeichert werden.

Der Benutzer kann einen Kick ausführen, indem er die angegebene Nachricht per Socket sendet, z. {do: "kick , user: "User1"}, oder URL anfordern. z.B. /kick/User1.

Die Funktion Kick muss Logik implementieren, um Benutzer nach Namen zu finden, eine Nachricht an das Opfer senden und den Socket trennen. Außerdem muss der Server User1 leave room an den aktiven Benutzer nach Socket senden.