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:
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)