[Help] Broadcast sur tout le reseau

Salut :smiley: !

Je suis en train de faire un service, et j’ai besoin d’envoyer un message à tous les périphériques sur mon réseau. J’ai regardé dans les autres services de Gladys et j’ai bien vu du multicast dans le service Xiaomi par exemple, mais il faut une adresse pour ca.

Comme c’est la première fois que je dois gérer les sockets et que je connais pas la lib dgram, je suis un peu perdu.

Je connais par contre le port sur lequel mes devices sont censés écouter, et le payload qu’ils attendent.

Comment je pourrais faire, en prenant l’exemple du service du xioami ci dessous svp ?

/**
 * @description On listening event.
 * @example
 * xiaomi.listening();
 */
function listening() {
  this.socket.addMembership(MULTICAST_ADDRESS);
  const payload = '{"cmd": "whois"}';
  this.socket.send(payload, 0, payload.length, DISCOVERY_PORT, MULTICAST_ADDRESS);
}

EDIT:
Je penses récupérer les NetworkInterfaces avec os.networkInterfaces(); . De ce que je comprends je devrais pouvoir récupérer entre 0 et x objets: https://nodejs.org/api/os.html#os_os_networkinterfaces

A partir des adress et netmask je devrais pouvoir calculer une adresse de broadcast.

Pas sûr que ça marche comme ça. Mais j’essaye :laughing:

Est-ce que tu as toujours le problème ou la lib que tu as trouvé dans l’autre topic résout ce soucis? :slight_smile:

L’autre lib corrige le soucis, mais j’avais trouvé la réponse quand même:
Sur un mac ou linux:

this.socket.setBroadcast(true);
this.socket.send(payload, 0, payload.length, DISCOVERY_PORT, '255.255.255.255');

l’ip 255.255.255.255 et l’adresse de broadcast par defaut ici.

Pour windows c’est un peu plus compliqué car il faut loop sur toute les Interfaces et en déduire manuellement les adresses: https://github.com/jangxx/node-magichome/blob/79a12562a29e5a9304a3a25273f37c8767fb7829/lib/Discovery.js#L40

=> Sujet résolu