def start(self): # start resolution for the missing URI's for key, uri in self.services.iteritems(): if not uri: if self.remote: if not self.sda: self.sda = ServiceDiscovery( debug=self.debug) # singleton # this might cause several service-resolved callbacks per service, # one per network interface # the URI is the same, so just act on the first one self.sda.connect('service-resolved', self.service_resolved) self.sda.connect('service-removed', self.service_removed) domain = 'local' self.sda.add_service_type(avahi.IF_UNSPEC, avahi.PROTO_INET, "_%s._sub._machinekit._tcp" % key, domain, key=key) self.emit('log', levels.DEBUG, "zeroconf-resolving %s" % key) else: # use IPC socket self.emit( 'uri-resolved', key, "ipc://%s/%d.%s.%s" % (self.dir, self.hal_instance, key, self.instance_uuid)) else: # URI explicitly set self.emit('uri-resolved', key, uri)
def start(self): # start resolution for the missing URI's for key, uri in self.services.iteritems(): if not uri: if self.remote: if not self.sda: self.sda = ServiceDiscovery(debug=self.debug) # singleton # this might cause several service-resolved callbacks per service, # one per network interface # the URI is the same, so just act on the first one self.sda.connect('service-resolved', self.service_resolved) self.sda.connect('service-removed', self.service_removed) domain = 'local' self.sda.add_service_type(avahi.IF_UNSPEC, avahi.PROTO_INET, "_%s._sub._machinekit._tcp" % key, domain, key=key) self.emit('log', levels.DEBUG,"zeroconf-resolving %s" % key) else: # use IPC socket self.emit('uri-resolved',key, "ipc://%s/%d.%s.%s" % (self.dir,self.hal_instance,key,self.instance_uuid)) else: # URI explicitly set self.emit('uri-resolved',key, uri)
def factory(ws, params=None): parameters = {} data = None if params: parameters.update(params) if ServiceDiscoveryJuristek.PARAMETER_OAB in params and params.get( ServiceDiscoveryJuristek.PARAMETER_OAB): data = "SELECT FROM 'INFO'.'INFO' WHERE 'TIPO_CONSULTA' = 'OAB'" if not data: data = "SELECT FROM 'INFO'.'INFO'" parameters.update({'data': data}) return ServiceDiscovery( ws, ws.post("SELECT FROM 'JURISTEK'.'INFO'", parameters))
class GServiceResolver(gobject.GObject): __gtype_name__ = 'GServiceResolver' __gsignals__ = { # log signal emits (level, text) 'log': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ( gobject.TYPE_INT, gobject.TYPE_STRING, )), # emits (<service key>, <uri>) in the following cases: # immediately if a URI was passed as argument # if URI is None, but a matching IPC socket pathname exists # once a URI is resolved by zeroconf 'uri-resolved': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ( gobject.TYPE_STRING, gobject.TYPE_STRING, )), # emitted if a zeroconf announcement removed. only passes <service key>. 'announcement-removed': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_STRING, )), } def print_log(self, source, level, text): print >> sys.stderr, levels.reverse_mapping[level], text def pair_to_dict(self, l): ''' helper to parse TXT record into dict ''' res = dict() for el in l: if "=" not in el: res[el] = '' else: tmp = el.split('=', 1) if len(tmp[0]) > 0: res[tmp[0]] = tmp[1] return res def service_resolved(self, sd, r): key = r.kwargs['key'] txt = self.pair_to_dict(r.txt) if not 'uuid' in txt: self.emit( 'log', levels.ERROR, "BUG: %s: %s txt=%s, no UUID in TXT record %s" % (key, r.name, r.txt, r.kwargs)) return if txt['uuid'] != self.instance_uuid: self.emit( 'log', levels.DEBUG, "%s %s, uuid's dont match: %s/%s" % (key, r.name, txt['uuid'], self.instance_uuid)) return if not 'dsn' in txt: self.emit( 'log', levels.ERROR, "BUG: UUID match but no dsn: %s: %s txt=%s %s" % (key, r.name, r.txt, r.kwargs)) return self.emit( 'log', levels.DEBUG, "%s resolved: '%s' %s %s " % (key, r.name, txt['dsn'], r.interface)) self.emit('uri-resolved', txt['service'], txt['dsn']) def service_removed(self, sd, r): svc = r.kwargs['key'] self.emit('log', levels.DEBUG, "%s removed: %s %s %s" % (svc, r.name, r.type, r.kwargs)) self.emit('announcement-removed', svc) def __init__( self, services, # dict service key -> URI instance_uuid=None, hal_instance=0, dir="/tmp", # where IPC sockets live remote=False, debug=False): gobject.GObject.__init__(self) self.services = services self.instance_uuid = instance_uuid self.hal_instance = hal_instance self.debug = debug self.remote = remote self.dir = dir self.sda = None if debug: self.connect('log', self.print_log) def start(self): # start resolution for the missing URI's for key, uri in self.services.iteritems(): if not uri: if self.remote: if not self.sda: self.sda = ServiceDiscovery( debug=self.debug) # singleton # this might cause several service-resolved callbacks per service, # one per network interface # the URI is the same, so just act on the first one self.sda.connect('service-resolved', self.service_resolved) self.sda.connect('service-removed', self.service_removed) domain = 'local' self.sda.add_service_type(avahi.IF_UNSPEC, avahi.PROTO_INET, "_%s._sub._machinekit._tcp" % key, domain, key=key) self.emit('log', levels.DEBUG, "zeroconf-resolving %s" % key) else: # use IPC socket self.emit( 'uri-resolved', key, "ipc://%s/%d.%s.%s" % (self.dir, self.hal_instance, key, self.instance_uuid)) else: # URI explicitly set self.emit('uri-resolved', key, uri)
class GServiceResolver(gobject.GObject): __gtype_name__ = 'GServiceResolver' __gsignals__ = { # log signal emits (level, text) 'log' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_INT,gobject.TYPE_STRING,)), # emits (<service key>, <uri>) in the following cases: # immediately if a URI was passed as argument # if URI is None, but a matching IPC socket pathname exists # once a URI is resolved by zeroconf 'uri-resolved' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_STRING,gobject.TYPE_STRING,)), # emitted if a zeroconf announcement removed. only passes <service key>. 'announcement-removed' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_STRING,)), } def print_log(self, source, level, text): print >> sys.stderr, levels.reverse_mapping[level], text def pair_to_dict(self, l): ''' helper to parse TXT record into dict ''' res = dict() for el in l: if "=" not in el: res[el]='' else: tmp = el.split('=',1) if len(tmp[0]) > 0: res[tmp[0]] = tmp[1] return res def service_resolved(self, sd, r): key = r.kwargs['key'] txt = self.pair_to_dict(r.txt) if not 'uuid' in txt: self.emit('log',levels.ERROR,"BUG: %s: %s txt=%s, no UUID in TXT record %s" % (key, r.name,r.txt,r.kwargs)) return if txt['uuid'] != self.instance_uuid: self.emit('log',levels.DEBUG,"%s %s, uuid's dont match: %s/%s" % (key,r.name,txt['uuid'], self.instance_uuid)) return if not 'dsn' in txt: self.emit('log',levels.ERROR,"BUG: UUID match but no dsn: %s: %s txt=%s %s" % (key, r.name,r.txt,r.kwargs)) return self.emit('log',levels.DEBUG,"%s resolved: '%s' %s %s " % (key,r.name,txt['dsn'],r.interface)) self.emit('uri-resolved',txt['service'], txt['dsn']) def service_removed(self,sd, r): svc = r.kwargs['key'] self.emit('log',levels.DEBUG,"%s removed: %s %s %s" % (svc, r.name,r.type,r.kwargs)) self.emit('announcement-removed',svc) def __init__(self, services, # dict service key -> URI instance_uuid=None, hal_instance=0, dir="/tmp", # where IPC sockets live remote=False, debug=False): gobject.GObject.__init__(self) self.services = services self.instance_uuid = instance_uuid self.hal_instance = hal_instance self.debug = debug self.remote = remote self.dir = dir self.sda = None if debug: self.connect('log', self.print_log) def start(self): # start resolution for the missing URI's for key, uri in self.services.iteritems(): if not uri: if self.remote: if not self.sda: self.sda = ServiceDiscovery(debug=self.debug) # singleton # this might cause several service-resolved callbacks per service, # one per network interface # the URI is the same, so just act on the first one self.sda.connect('service-resolved', self.service_resolved) self.sda.connect('service-removed', self.service_removed) domain = 'local' self.sda.add_service_type(avahi.IF_UNSPEC, avahi.PROTO_INET, "_%s._sub._machinekit._tcp" % key, domain, key=key) self.emit('log', levels.DEBUG,"zeroconf-resolving %s" % key) else: # use IPC socket self.emit('uri-resolved',key, "ipc://%s/%d.%s.%s" % (self.dir,self.hal_instance,key,self.instance_uuid)) else: # URI explicitly set self.emit('uri-resolved',key, uri)