blob: 8826346b49dd14b43f11e0e28da22cb4a19d5646 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
"""Add support for discovering mDNS services."""
import zeroconf
class MDNS:
"""Base class to discover mDNS services."""
def __init__(self):
"""Initialize the discovery."""
self.zeroconf = None
self.services = []
self._browsers = []
def register_service(self, service):
"""Register a mDNS service."""
self.services.append(service)
def start(self):
"""Start discovery."""
try:
self.zeroconf = zeroconf.Zeroconf()
for service in self.services:
self._browsers.append(zeroconf.ServiceBrowser(
self.zeroconf, service.typ, service))
except Exception: # pylint: disable=broad-except
self.stop()
raise
def stop(self):
"""Stop discovering."""
while self._browsers:
self._browsers.pop().cancel()
for service in self.services:
service.reset()
if self.zeroconf:
self.zeroconf.close()
self.zeroconf = None
@property
def entries(self):
"""Return all entries in the cache."""
return self.zeroconf.cache.entries()
|