eculocate

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit 341d192dce3a61838f539c659c9e0441442511d9
parent 9bbe366f9e4e4d2a2f4d8619391665503b354740
Author: Daniel Barlow <dan@telent.net>
Date:   Thu, 29 Jan 2026 12:26:03 +0000

add callback method when services change

Diffstat:
Mclient/eculocate.py | 23+++++++++++++++++++++--
1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/client/eculocate.py b/client/eculocate.py @@ -17,14 +17,17 @@ class ZListener(ServiceListener): def update_service(self, zc: Zeroconf, type_: str, name: str) -> None: print(f"Service {name} updated") + self.client.on_services_changed() def remove_service(self, zc: Zeroconf, type_: str, name: str) -> None: print(f"Service {name} removed") + self.client.on_services_changed() def add_service(self, zc: Zeroconf, type_: str, name: str) -> None: info = zc.get_service_info(type_, name) print(f"Service {name} added, service info: {info}") self.client.host_addresses[name] = (socket.inet_ntoa(info.addresses[0]), info.port) + self.client.on_services_changed() class Client(): @@ -81,6 +84,7 @@ class Client(): if name == None: self.started = False self.selected_service_name = name + self.on_services_changed() def start_recording(self): if self.selected_service_name != None: @@ -96,16 +100,31 @@ class Client(): print("stopping record") self.started = False + def on_services_changed(self): + # override this in subclass if you want to know when + # service instances appear/disappear + return None if __name__ == '__main__': + import pprint + + exists = False + name = sys.argv[1] timeout = int(sys.argv[2]) fqname = f"{name}._keihin._udp.local." - client = Client() - exists = False + class MyClient(Client): + def on_services_changed(self): + print("services changed: now known ") + pprint.pp(self.host_addresses) + if self.host_addresses.get(fqname, False): + print(f"found {fqname}") + + client = MyClient() + while not exists: time.sleep(2) exists = client.knows_service(fqname)