class PublishService(Service): """Service implementing zeroconf publishing service for chains master servers""" def onInit(self): log.info('Zeroconf publish init') self.ip_addr = self._get_ip() self.hostname = socket.gethostname() self.services = [] self.desc = {'Description': 'Chains Home Automation service on rabbitmq'} self.amqp_info = ServiceInfo("_amqp._tcp.local.", "Chains Master AMQP %s._amqp._tcp.local." % self.hostname, socket.inet_aton(self.ip_addr), 5672, 0, 0, self.desc, "%s.local." % self.hostname) self.service.append(self.amqp_info) self.zeroconf = Zeroconf() def onStart(self): log.info('Starting zeroconf publishing service') for info in self.services: self.zeroconf.registerService(info) def _get_ip(self): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(('google.com', 80)) ip = sock.getsockname()[0] sock.close() return ip
class ServerPublisher: def __init__(self): self.zero_conf = Zeroconf() def publish(self, host, port): log.debug('publishing server at %s:%s' % (host, port)) hostname = gethostname() service_info = ServiceInfo("_checkers._tcp.local.", "%s._checkers._tcp.local." % hostname, inet_aton(host), port, 0, 0, {}, server=hostname + '.local') self.zero_conf.registerService(service_info) def shutdown(self): log.debug('shutting down server publisher') self.zero_conf.unregisterAllServices() self.zero_conf.close()
def start(): global localHTTP, zeroconf, info, httpthread ip = get_local_address() print("Local IP is " + ip) desc = {'version': '0.1'} info = ServiceInfo("_http._tcp.local.", "Alexa Device._http._tcp.local.", socket.inet_aton(ip), alexa_params.LOCAL_PORT, 0, 0, desc, alexa_params.LOCAL_HOST + ".") zeroconf = Zeroconf() zeroconf.registerService(info) print("Local mDNS is started, domain is " + alexa_params.LOCAL_HOST) localHTTP = HTTPServer(("", alexa_params.LOCAL_PORT), alexa_http_config.AlexaConfig) httpthread = threading.Thread(target=localHTTP.serve_forever) httpthread.start() print("Local HTTP is " + alexa_params.BASE_URL) alexa_control.start()
class Broadcast(object): """ A zeroconf listener that broadcasts the address for the printing service """ def __init__(self, address, port): self.address = address self.port = port self.properties = { 'nickname': u'Printer Nickname', 'service': u'Tryton POS' } self.service = Zeroconf() self._service_info = None @property def service_info(self): if self._service_info is None: self._service_info = ServiceInfo( "_trytonpos._tcp.local.", "%s._trytonpos._tcp.local." % socket.gethostname(), socket.inet_aton(self.address), self.port, 0, 0, self.properties ) return self._service_info def register_zeroconf(self): """ Register a new service for printing """ print("Registration of service @ %s:%s" % (self.address, self.port)) self.service.registerService(self.service_info) def unregister_zeroconf(self): """ Unregister the given service """ print("Unregistering...") self.service.unregisterService(self.service_info) self.service.close()