Hello World,
Après plusieurs années sur sur le site du zéro, j’ai décidé de franchir le pas et de venir un peu plus souvent sur le zeste du savoir.
~Après cette petite aparté, ~ voici mon petit problème sur mon projet. Je ne trouve pas comment faire pour qu’un utilisateur se déconnecte d’un namespace.
J’ai un namespace par default
io.on("connection", function (socket) {
socket.on("new-user", (username) => {
io.emit("user-connected", username);
});
socket.on("user-enter-pictonnary", () => {
console.log("ICI SPACE PICTO");
space = io.of(`/pictonnary`);
namespacePictonnary(space);
});
socket.on("user-enter-chat", () => {
console.log("ICI SPACE CHAT");
space = io.of(`/chat`);
namespaceChat(space);
});
});
Ce namespace par default va appelé la fonction selon le namespace que je renvoie depuis le front. Voici les deux namespaces
/* NAMESPACE PICTONNARY */
function namespacePictonnary(space) {
console.log("On se connecte au NameSpace Pictonnary");
space.on("connection", (socket) => {
socket.on("welcome-space", (username) => {
space.emit("user-connected-space", username);
});
socket.on("disconnect", function () {
io.of("/")
.in("pictonnary")
.clients((error, socketIds) => {
if (error) throw error;
socketIds.forEach((socketId) =>
io.of("/").adapter.remoteLeave(socketId, "chat")
);
});
/* On récupére tous les clients dans le salon */
space.clients((error, clients) => {
if (error) throw error;
console.log(clients);
});
console.log("Someone disconnected from namespace chat.");
});
/* On récupére tous les clients dans le salon */
space.clients((error, clients) => {
if (error) throw error;
console.log(clients);
});
});
}
/* NAMESPACE CHAT */
function namespaceChat(space) {
console.log("On se connecte au NameSpace Chat");
space.on("connection", (socket) => {
socket.on("welcome-space", (username) => {
space.emit("user-connected-space", username);
});
socket.on("disconnect", function () {
io.of("/")
.in("chat")
.clients((error, socketIds) => {
if (error) throw error;
socketIds.forEach((socketId) =>
io.of("/").adapter.remoteLeave(socketId, "chat")
);
});
/* On récupére tous les clients dans le salon */
space.clients((error, clients) => {
if (error) throw error;
console.log(clients);
});
console.log("Someone disconnected from namespace chat.");
});
/* On récupére tous les clients dans le salon */
space.clients((error, clients) => {
if (error) throw error;
console.log(clients);
});
});
}
Ici, j’affiche les clients qui sont connecté à mon namespace
space.clients((error, clients) => {
if (error) throw error;
console.log(clients);
});
Quand je me connecte 1 fois, j’ai bien mon utilisateur qui s’ajoute
[ '/chat#r9NQo4PU7nhAxX4HAAAF' ]
Quand je me déconnecte, mon tableau se vide bien
[]
Mais quand je me reconnecte, il me créer un nouvel id mais en double
[ '/chat#gCBmRJ9fW2zblFJ1AAAI' ] [ '/chat#gCBmRJ9fW2zblFJ1AAAI' ]
Et cela augmente a chaque déconnexion et connexion :/
Je ne sais pas ou j’ai mal fait :/