def on_connect(self):
		addr = self.connectEntryBuffer.get()
		selfAddr = self.selfEntryBuffer.get()
		
		print ' - Connecting ', selfAddr, ' ServicePort to ', addr 

		clientNS = selfAddr.split('/')[0]
		clientAddr = selfAddr[:selfAddr.rfind(':')][len(clientNS)+1:]
		if clientNS.find(':') < 0: clientNS = clientNS+':2809'
		clientPortName = selfAddr.split(':')[1]
		hostNS = addr.split('/')[0]
		hostAddr   = addr[:addr.rfind(':')][len(hostNS)+1:]
		if hostNS.find(':') < 0: hostNS = hostNS+':2809'
		hostPortName   = addr.split(':')[1]
		
		clientCorbaNaming = OpenRTM_aist.CorbaNaming(OpenRTM_aist.Manager.instance().getORB(), clientNS)

 		clientObj = clientCorbaNaming.resolve(clientAddr)
		if CORBA.is_nil(clientObj):
			sys.stdout.write(' -- Failed to connect %s' % clientAddr)
			return

		client = OpenRTM_aist.CorbaConsumer()
		client.setObject(clientObj)
		clientPorts = client._ptr().get_ports()
		clientPort = None
		for p in clientPorts:
			if p.get_port_profile().name.split('.')[1] == clientPortName:
				clientPort = p

		if not clientPort:
			sys.stdout.write(' -- Failed to find port %s' % clientPort)

		hostCorbaNaming = OpenRTM_aist.CorbaNaming(OpenRTM_aist.Manager.instance().getORB(), clientNS)

		hostObj = hostCorbaNaming.resolve(hostAddr)
		if CORBA.is_nil(hostObj):
			sys.stdout.write(' -- Failed to connect %s' % clientAddr)
			return

		host = OpenRTM_aist.CorbaConsumer()
		host.setObject(hostObj)
		hostPorts = host._ptr().get_ports()
		hostPort = None
		for p in hostPorts:
			if p.get_port_profile().name.split('.')[1] == hostPortName:
				hostPort = p

		if not hostPort:
			sys.stdout.write(' -- Failed to find port %s' % hostPort)
			return

		name = clientPortName + '_to_' + hostPortName
		connector_id = name
		ports = [hostPort, clientPort]
		properties = []
		prof = RTC.ConnectorProfile(name, connector_id, ports, properties)

		ret = hostPort.connect(prof)

		hostECList = host._ptr().get_owned_contexts();
		hostECList[0].activate_component(host._ptr());
		clientECList = client._ptr().get_owned_contexts();
		clientECList[0].activate_component(client._ptr());

		for b in self._enableAfterConnectButton:
			b.config(state=tk.NORMAL)
			pass
		
		
		pass
	def on_update(self):
		addr = VREP_RTC_PATH
		selfAddr = SELF_RTC_PATH

		clientNS = selfAddr.split('/')[0]
		clientAddr = selfAddr[:selfAddr.rfind(':')][len(clientNS)+1:]
		if clientNS.find(':') < 0: clientNS = clientNS+':2809'
		clientPortName = selfAddr.split(':')[1]
		hostNS = addr.split('/')[0]
		hostAddr   = addr[:addr.rfind(':')][len(hostNS)+1:]
		if hostNS.find(':') < 0: hostNS = hostNS+':2809'
		hostPortName   = addr.split(':')[1]

		robotRTCs  = {}
		rangeRTCs  = {}
		cameraRTCs = {}
		objectRTCs = {}
		otherRTCs = {}
		try:
			clientCorbaNaming = OpenRTM_aist.CorbaNaming(OpenRTM_aist.Manager.instance().getORB(), clientNS)
			root_cxt = clientCorbaNaming.getRootContext()

			def parseContext(cxt_str, cxt):
				objs = []
				bindingList, bindingIterator = cxt.list(30)
				for b in bindingList:
					if b.binding_type == CosNaming.ncontext:
						child_cxt_str = b.binding_name[0].id + '.' + b.binding_name[0].kind + '/'
						objs = objs + [cxt_str + o for o in parseContext(child_cxt_str, cxt.resolve(b.binding_name))]
					elif b.binding_type == CosNaming.nobject:
						objs.append(cxt_str + b.binding_name[0].id + '.' + b.binding_name[0].kind)
				return objs
			
			rtobjectNames = parseContext("", root_cxt)
			for rtobjectName in rtobjectNames:
				obj = clientCorbaNaming.resolve(rtobjectName)
				if CORBA.is_nil(obj):
					sys.stdout.write(' - RTObject(%s) not found' % rtobjectName)
					continue
				corbaConsumer = OpenRTM_aist.CorbaConsumer()
				corbaConsumer.setObject(obj)
				try:
					prof = corbaConsumer._ptr().get_component_profile()
					if prof.type_name == 'RobotRTC' and prof.category == 'Simulator':
						robotRTCs[rtobjectName] = corbaConsumer
					elif prof.type_name == 'RangeRTC' and prof.category == 'Simulator':
						rangeRTCs[rtobjectName] = corbaConsumer
					elif prof.type_name == 'CameraRTC' and prof.category == 'Simulator':
						cameraRTCs[rtobjectName] = corbaConsumer
					else:
						if prof.type_name == 'SimulationManager' and prof.category == 'Simulator':

							pass
						else:

							ns, path, port = self.get_host_rtc_paths()
							print clientNS + '/' + rtobjectName
							print ns+'/'+path
							if ns+'/'+path == clientNS+'/'+rtobjectName:
								pass
							else:
								otherRTCs[clientNS+'/'+rtobjectName] = corbaConsumer
				except:
					traceback.print_exc()
					pass

			print robotRTCs
			print otherRTCs
		
			def get_object_profile(rtcs):
				profile_dic = {}
				for n, r in rtcs.items():
					objName = ""
					arg = ""
					try:
						for nv in r._ptr().get_component_profile().properties:
							if nv.name == 'conf.__innerparam.objectName':
								objName = any.from_any(nv.value, keep_structs=True)
							elif nv.name == 'conf.__innerparam.argument':
								arg = any.from_any(nv.value, keep_structs=True)
						profile_dic[objName] = arg
					except:
						pass
				return profile_dic

			self._confRobotsBuffer.set(yaml.dump(get_object_profile(robotRTCs)))
			self._confRangesBuffer.set(yaml.dump(get_object_profile(rangeRTCs)))
			self._confCamerasBuffer.set(yaml.dump(get_object_profile(cameraRTCs)))

			self.rtcMenu['menu'].delete("0", "end")
			for r in otherRTCs.keys():
				self.rtcMenu['menu'].add_command(label=str(r), command= lambda x=str(r): self.synchRTCEntryBuffer.set(x))

			if len(otherRTCs.keys()) > 0:
				self.synchRTCEntryBuffer.set(otherRTCs.keys()[0])
			else:
				self.synchRTCEntryBuffer.set("")
		
		
			if self._simulator._ptr():
				retval, rtcs = self._simulator._ptr().getSynchronizingRTCs()
				if self._fullpath_to_self[0] in rtcs:
					rtcs.remove(self._fullpath_to_self[0])
				ss = yaml.dump(rtcs)
				if len(rtcs) == 1:
					ss = '[' + ss + ']'
				elif len(rtcs) == 0:
					ss = '[]'
				self._confSyncRTCsBuffer.set(ss)
			else:
				self._confSyncRTCsBuffer.set("[]")
			
		except CORBA.TRANSIENT, e:		
			print 'CORBA.TRANSIENT Exception'
 def testBaseCorbaFetching(self):
     self.assertTrue(not CORBA.is_nil(self._objC))
     pass
Ejemplo n.º 4
0
 def testBaseCorbaFetching(self):
     self.assertTrue(not CORBA.is_nil(self._objC))
     pass
Ejemplo n.º 5
0
    def __init__(self):
        self.orb = CORBA.ORB_init()
        try:
            self.ior = open("LTTSample0.rtc").read()
        except:
            print "LTTSample0.rtc not found"
            import time, sys
            write = sys.stdout.write
            write("Launching LTTSampleComp...")
            sys.stdout.flush()
            if os.sep == '\\':
                os.system("start LTTSampleComp.exe")
            else:
                os.system("./LTTSampleComp&")
            while True:
                try:
                    self.ior = open("LTTSample0.rtc").read()
                    break;
                except:
                    write(".")
                    sys.stdout.flush()
                    time.sleep(0.01)
                    pass
            print "done"
        obj = self.orb.string_to_object(self.ior)
        if CORBA.is_nil(obj):
            print "Object in LTTSample0.rtc is nil. Restarting LTTSampleComp..."
            if os.sep == '\\':
                os.system("start LTTSampleComp.exe")
            else:
                os.system("./LTTSampleComp&")
            self.ior = open("LTTSample0.rtc").read()
            obj = self.orb.string_to_object(self.ior)
            if CORBA.is_nil(obj):
                print "Object reference is nil"
                sys.exit(1)

        import omniORB
        import sys

        if os.sep == '\\':
            os.system("omniidl -I. -bpython SDOPackage.idl RTC.idl LogicalTimeTriggeredEC.idl")
            import RTC
            import OpenRTM
        else:
            self.sdo_idl = omniORB.importIDL("idl/SDOPackage.idl")
            self.rtc_idl = omniORB.importIDL("idl/RTC.idl", ["-Iidl"])
            self.ltt_idl = omniORB.importIDL("idl/LogicalTimeTriggeredEC.idl",
                                         ["-Iidl"])
            RTC = sys.modules["RTC"]
            OpenRTM = sys.modules["OpenRTM"]
        try:
            self.rtobj = obj._narrow(RTC.RTObject)
        except:
            print "Narrowing failed. Restarting LTTSampleComp..."
            import time
            print "Launching LTTSampleComp..."
            if os.sep == '\\':
                os.system("start LTTSampleComp.exe")
            else:
                os.system("./LTTSampleComp&")
            time.sleep(1.0)
            obj = self.orb.string_to_object(open("LTTSample0.rtc").read())
            self.rtobj = obj._narrow(RTC.RTObject)

        cxts = self.rtobj.get_owned_contexts()
        self.lttcxt = cxts[0]._narrow(OpenRTM.LogicalTimeTriggeredEC)
        profile = self.lttcxt.get_profile()
        p = {}
        p["kind"] = profile.kind
        p["rate"] = profile.rate
        p["owner"] = profile.owner
        from omniORB import any
        for prop in profile.properties:
            p[prop.name] = any.from_any(prop.value)
        print "ExecutionContext:"
        print "      type:", p.pop("type")
        print "      name:", p.pop("name")
        print "      kind:", p.pop("kind")
        print "      rate:", p.pop("rate")
        print "     owner:", p.pop("owner")
        print "properties:", p