|
22 | 22 | from enum import Enum
|
23 | 23 | from typing import Dict, List, Optional
|
24 | 24 |
|
25 |
| -from zeroconf import IPVersion, ServiceStateChange, Zeroconf |
| 25 | +from zeroconf import IPVersion, ServiceListener, ServiceStateChange, Zeroconf |
26 | 26 | from zeroconf.asyncio import AsyncServiceBrowser, AsyncServiceInfo, AsyncZeroconfServiceTypes
|
27 | 27 |
|
28 | 28 |
|
@@ -75,6 +75,20 @@ class MdnsServiceType(Enum):
|
75 | 75 | BORDER_ROUTER = "_meshcop._udp.local."
|
76 | 76 |
|
77 | 77 |
|
| 78 | +class DummyServiceListener(ServiceListener): |
| 79 | + """ |
| 80 | + A service listener required for the TXT record data to get populated and come back |
| 81 | + """ |
| 82 | + def add_service(self, zeroconf: Zeroconf, service_type: str, name: str) -> None: |
| 83 | + pass |
| 84 | + |
| 85 | + def remove_service(self, zeroconf: Zeroconf, service_type: str, name: str) -> None: |
| 86 | + pass |
| 87 | + |
| 88 | + def update_service(self, zeroconf: Zeroconf, service_type: str, name: str) -> None: |
| 89 | + pass |
| 90 | + |
| 91 | + |
78 | 92 | class MdnsDiscovery:
|
79 | 93 |
|
80 | 94 | DISCOVERY_TIMEOUT_SEC = 15
|
@@ -160,10 +174,13 @@ async def get_operational_service(self, service_name: str = None,
|
160 | 174 | mdns_service_info = await self._get_service(MdnsServiceType.OPERATIONAL, log_output, discovery_timeout_sec)
|
161 | 175 | else:
|
162 | 176 | print(f"Looking for MDNS service type '{service_type}', service name '{service_name}'")
|
163 |
| - |
164 |
| - # Get service info |
| 177 | + service_listener = DummyServiceListener() |
| 178 | + self._zc.add_service_listener(MdnsServiceType.OPERATIONAL.value, service_listener) |
| 179 | + # Adds delay so TXT record is able to get populated |
| 180 | + await asyncio.sleep(1) |
165 | 181 | service_info = AsyncServiceInfo(service_type, service_name)
|
166 | 182 | is_discovered = await service_info.async_request(self._zc, 3000)
|
| 183 | + self._zc.remove_service_listener(service_listener) |
167 | 184 | if is_discovered:
|
168 | 185 | mdns_service_info = self._to_mdns_service_info_class(service_info)
|
169 | 186 | self._discovered_services = {}
|
|
0 commit comments