@@ -75,19 +75,22 @@ class MdnsServiceType(Enum):
75
75
BORDER_ROUTER = "_meshcop._udp.local."
76
76
77
77
78
- class DummyServiceListener (ServiceListener ):
78
+ class MdnsServiceListener (ServiceListener ):
79
79
"""
80
80
A service listener required for the TXT record data to get populated and come back
81
81
"""
82
82
83
+ def __init__ (self ):
84
+ self .updated_event = asyncio .Event ()
85
+
83
86
def add_service (self , zeroconf : Zeroconf , service_type : str , name : str ) -> None :
84
- pass
87
+ self . updated_event . set ()
85
88
86
89
def remove_service (self , zeroconf : Zeroconf , service_type : str , name : str ) -> None :
87
90
pass
88
91
89
92
def update_service (self , zeroconf : Zeroconf , service_type : str , name : str ) -> None :
90
- pass
93
+ self . updated_event . set ()
91
94
92
95
93
96
class MdnsDiscovery :
@@ -177,16 +180,20 @@ async def get_operational_service(self, service_name: str = None,
177
180
print (f"Looking for MDNS service type '{ service_type } ', service name '{ service_name } '" )
178
181
179
182
# Adds service listener
180
- service_listener = DummyServiceListener ()
183
+ service_listener = MdnsServiceListener ()
181
184
self ._zc .add_service_listener (MdnsServiceType .OPERATIONAL .value , service_listener )
182
185
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 )
185
193
186
194
# Get service info
187
195
service_info = AsyncServiceInfo (service_type , service_name )
188
196
is_discovered = await service_info .async_request (self ._zc , 3000 )
189
- self ._zc .remove_service_listener (service_listener )
190
197
191
198
# Adds service to discovered services
192
199
if is_discovered :
0 commit comments