Skip to content

Commit 62624ff

Browse files
Replaces 1 sec fixed sleep in operational service logic with service listener event wait time
1 parent 3e3d651 commit 62624ff

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

src/python_testing/mdns_discovery/mdns_discovery.py

+14-7
Original file line numberDiff line numberDiff line change
@@ -75,19 +75,22 @@ class MdnsServiceType(Enum):
7575
BORDER_ROUTER = "_meshcop._udp.local."
7676

7777

78-
class DummyServiceListener(ServiceListener):
78+
class MdnsServiceListener(ServiceListener):
7979
"""
8080
A service listener required for the TXT record data to get populated and come back
8181
"""
8282

83+
def __init__(self):
84+
self.updated_event = asyncio.Event()
85+
8386
def add_service(self, zeroconf: Zeroconf, service_type: str, name: str) -> None:
84-
pass
87+
self.updated_event.set()
8588

8689
def remove_service(self, zeroconf: Zeroconf, service_type: str, name: str) -> None:
8790
pass
8891

8992
def update_service(self, zeroconf: Zeroconf, service_type: str, name: str) -> None:
90-
pass
93+
self.updated_event.set()
9194

9295

9396
class MdnsDiscovery:
@@ -177,16 +180,20 @@ async def get_operational_service(self, service_name: str = None,
177180
print(f"Looking for MDNS service type '{service_type}', service name '{service_name}'")
178181

179182
# Adds service listener
180-
service_listener = DummyServiceListener()
183+
service_listener = MdnsServiceListener()
181184
self._zc.add_service_listener(MdnsServiceType.OPERATIONAL.value, service_listener)
182185

183-
# Adds delay so TXT record is able to get populated
184-
await asyncio.sleep(1)
186+
# Wait for the add/update service event or timeout
187+
try:
188+
await asyncio.wait_for(service_listener.updated_event.wait(), discovery_timeout_sec)
189+
except asyncio.TimeoutError:
190+
print(f"Service lookup for {service_name} timeout ({discovery_timeout_sec}) reached without an update.")
191+
finally:
192+
self._zc.remove_service_listener(service_listener)
185193

186194
# Get service info
187195
service_info = AsyncServiceInfo(service_type, service_name)
188196
is_discovered = await service_info.async_request(self._zc, 3000)
189-
self._zc.remove_service_listener(service_listener)
190197

191198
# Adds service to discovered services
192199
if is_discovered:

0 commit comments

Comments
 (0)