Пример #1
0
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
Пример #2
0
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()
Пример #3
0
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()
Пример #4
0
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()