Bonjour,
Je rencontre quelques difficultés pour avancer dans mon développement et j'aimerais avoir des avis différents sur ce problèmes. Mon serveur nodeJS collecte la position des utilisateurs et recherche pour chacun d'entre eux les utilisateurs à proximité (requête spatiale mongoose). Jusqu'ici tout va bien.
Pour mettre en relation un utilisateur avec ses voisins, j'ai besoin de lui attribuer une room (socket.io) qui sera commune à celle de ses voisins.
Exemple :
L'utilisateur A peut être voisin de B, B peut être voisin de C mais A n'est pas nécessairement voisin de C. B devra donc avoir une room commune avec A, et une autre room commune avec C. Un utilisateur pourra donc avoir plusieurs rooms.
Lorsqu'un utilisateur se connecte et qu'il a des voisins, laquelle des rooms de ses voisins lui attribuer ?
Il faut lui attribuer la room qui est commune avec un maximum de voisins, celle utilisée par le plus grand nombre d'entre-eux. Tous les voisins ne l'utilisent peut-être pas, mais ceux-là ont peut-être une room en commun également que je devrait identifier pour l'attribuer aussi à mon utilisateur qui se connecte.
Maintenant que les présentation sont faites passons aux choses concrètes
Je souhaite trouver l'identifiant de la room détenue par le maximum de personnes à proximités. Idéalement le code pourrait se placer après le neighboors.forEach qui retourne l'objet neighboor (au singulier) que je peut interroger avec neighboor.username et
Je ne sais pas si cela est utile mais neighboor.rooms. rooms est un tableau et je peux connaitre le nombre de rooms avec neighboor.rooms.length.
Comment dois-je procéder pour faire cela ? j'avoue que c'est pas très clair pour moi et j'ai du mal à trouver une méthode.
Merci.
Essai1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 function findUser () { userModel.find( { loc : { $near : data.position, $maxDistance: 100/111.12 } } , function ( err, neighboors ){ if (err) { console.log("error in finding near", err); throw err; } console.log('user', data.username, 'has', neighboors.length, 'neighboors'); neighboors.forEach ( function (neighboor) { // recherche }); }); };
Essai2 avec tableau multidimensionnel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 neighboors.forEach ( function (neighboor) { function tableau(nom,namespace) { this.name = nom; this.nbNamespace = namespace; }; neighboorData = new tableau (neighboor.userId, neighboor.namespace.length);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 tab = []; subtab = []; neighboors.forEach ( function (neighboor) { neighboorData = new tableau (neighboor.userId, neighboor.namespace.length); subtab.push(neighboorData); tab.push(subtab.concat()); });
Partager