ec_cons.consumerReady() erc_cons = Consumer("ALMA_EVENT_RESPONSE_CHANNEL") erc_cons.addSubscription("Duration", eventHandler) erc_cons.consumerReady() #create the event dispatcher ed = EventDispatcher(FAKE_MS) #sleep for awhile giving consumers a chance to process a few #events sleep(60) ec_cons.disconnect() erc_cons.disconnect() ed.destroy() if EVENT_COUNTER["IDL:alma/FRIDGE/temperatureDataBlockEvent:1.0"] > 10: print "Good...enough temperatureDataBlockEvent's" else: print "Bad...not enough temperatureDataBlockEvent's" if EVENT_COUNTER["IDL:alma/xmlentity/XmlEntityStruct:1.0"] > 4: print "Good...enough XmlEntityStruct's" else: print "Bad...not enough XmlEntityStruct's" if EVENT_COUNTER["IDL:alma/acstime/Duration:1.0"] > 1 and EVENT_COUNTER["IDL:alma/acstime/Duration:1.0"] < EVENT_COUNTER["IDL:alma/FRIDGE/temperatureDataBlockEvent:1.0"]: print "Good...enough Durations have been received" else: print "Bad...the wrong number of Durations were received"
class Simulator(CharacteristicComponent, #Base IDL interface BaseSimulator, #CORBA stubs for IDL interface ContainerServices, #Developer niceties ComponentLifecycle): #HLA stuff ''' ''' #------------------------------------------------------------------------------ def __init__(self,ir=None): ''' Just call superclass constructors here. ''' if ir != None: CharacteristicComponent.__init__(self) ContainerServices.__init__(self) self.ir = ir BaseSimulator.__init__(self,ir) return #------------------------------------------------------------------------------ #--Override ComponentLifecycle methods----------------------------------------- #------------------------------------------------------------------------------ def initialize (self): ''' Overriden from baseclass. ''' #we can finally access the IR location and call BaseSimulator's #constructor...dynamically changing this object's inheritance #BaseSimulator.__init__(self, self.ir, self._get_name()) # Don't do it because is done in __init__ # # hook to call the initialize method from the Simulation Server # simServer = getSimProxy(self._get_name(), self.ir).server_handler # print 'Getting initialize method from server' # initMethodDict = simServer.getMethod('initialize2') # if initMethodDict != None: # print 'executing initialize method: ' + str(initMethodDict['Value']) # _executeDict(initMethodDict, [self], getCompLocalNS(self._get_name())) #add myself to the global lis addComponent(self._get_name(), self) # Create a BehaviorProxy, passing the interface repository id to the # constructor. proxy = getSimProxy(self._get_name(), self.ir) #possible for developers to configure an initialize method #for the simulated component. ns = getCompLocalNS(self._get_name()) ns['SELF'] = self _execute(self._get_name(), "initialize", [self], ns) #create the object used to dispatch events automatically self.event_dispatcher = EventDispatcher(self) #handle attributes that should NOT be generically simulated self.__setupSpecialCases() #------------------------------------------------------------------------------ def cleanUp(self): ''' Overriden from baseclass. ''' BaseSimulator.cleanUp(self) self.event_dispatcher.destroy() #possible for developers to configure cleanUp method #for the simulated component. _execute(self._get_name(), "cleanUp", [self], getCompLocalNS(self._get_name())) ComponentLifecycle.cleanUp(self) removeComponent(self._get_name()) #------------------------------------------------------------------------------ def __setupSpecialCases(self): ''' Helper method designed to handle special cases that we do not necessarily want being 100% simulated like BACI properties, callbacks, etc. ''' #look in the CDB for instructions on how to setup the special cases. This #is mainly used to see if the end-user has specified some devIO class to #be used with a BACI property. if_list = getSuperIDs(self.ir) if_list.append(self.ir) simCDB = getSimProxy(self._get_name(), self.ir).cdb_handler simServer = getSimProxy(self._get_name(), self.ir).server_handler #IFR ir = interfaceRepository() #_executeXyz methods need an argument list args = [self] #get an interface description for this component interf = ir.lookup_id(self._NP_RepositoryId) interf = interf._narrow(CORBA.InterfaceDef) interf = interf.describe_interface() #use the IFR descrip to go searching for BACI properties for attribute in interf.attributes: #if the typecode is NOT an object reference it cannot be a BACI property. #that implies it's OK to skip if not isinstance(attribute.type, omniORB.tcInternal.TypeCode_objref): continue #save the short version of the attribute's ID (i.e., ROdouble) tempType = attribute.type.id().split(":")[1].split("/").pop() #sequence BACI property if (tempType=="ROstringSeq")or(tempType=="ROdoubleSeq")or(tempType=="RWdoubleSeq")or(tempType=="ROlongSeq")or(tempType=="RWlongSeq")or(tempType=="ROfloatSeq")or(tempType=="RWfloatSeq"): attrDict = simServer.getMethod(attribute.name) if attrDict == None: attrDict = simCDB.getMethod(attribute.name) if attrDict!= None: devio = _executeDict(attrDict, args, getCompLocalNS(self._get_name())) else: devio = DevIO([]) addProperty(self, attribute.name, devio_ref=devio) continue #double BACI property elif (tempType=="ROdouble")or(tempType=="RWdouble"): attrDict = simServer.getMethod(attribute.name) if attrDict == None: attrDict = simCDB.getMethod(attribute.name) if attrDict!= None: devio = _executeDict(attrDict, args, getCompLocalNS(self._get_name())) else: devio = DevIO(float(0)) addProperty(self, attribute.name, devio_ref=devio) continue #float BACI property elif (tempType=="ROfloat")or(tempType=="RWfloat"): attrDict = simServer.getMethod(attribute.name) if attrDict == None: attrDict = simCDB.getMethod(attribute.name) if attrDict!= None: devio = _executeDict(attrDict, args, getCompLocalNS(self._get_name())) else: devio = DevIO(float(0)) addProperty(self, attribute.name, devio_ref=devio) continue #long BACI property elif (tempType=="ROlong")or(tempType=="RWlong"): attrDict = simServer.getMethod(attribute.name) if attrDict == None: attrDict = simCDB.getMethod(attribute.name) if attrDict!= None: devio = _executeDict(attrDict, args, getCompLocalNS(self._get_name())) else: devio = DevIO(0) addProperty(self, attribute.name, devio_ref=devio) continue #long (Python long also) BACI property elif (tempType=="ROpattern")or(tempType=="RWpattern")or(tempType=="ROlongLong")or(tempType=="RWlongLong")or(tempType=="ROuLongLong")or(tempType=="ROuLongLong"): attrDict = simServer.getMethod(attribute.name) if attrDict == None: attrDict = simCDB.getMethod(attribute.name) if attrDict!= None: devio = _executeDict(attrDict, args, getCompLocalNS(self._get_name())) else: devio = DevIO(0L) addProperty(self, attribute.name, devio_ref=devio) continue #string BACI property elif (tempType=="ROstring")or(tempType=="RWstring"): attrDict = simServer.getMethod(attribute.name) if attrDict == None: attrDict = simCDB.getMethod(attribute.name) if attrDict!= None: devio = _executeDict(attrDict, args, getCompLocalNS(self._get_name())) else: devio = DevIO("") addProperty(self, attribute.name, devio_ref=devio) continue else: ifrName = attribute.type.id() try: #get an interface description for this property tIfr = ir.lookup_id(ifrName) tIfr = tIfr._narrow(CORBA.InterfaceDef) tIfr = tIfr.describe_interface() for tAttr in tIfr.attributes: #check if it's a default_value AND an enum! if (tAttr.name=="default_value") and (tAttr.type.kind()==CORBA.tk_enum): #GREAT! It's completely safe to add! attrDict = simServer.getMethod(attribute.name) if attrDict == None: attrDict = simCDB.getMethod(attribute.name) if attrDict!= None: devio = _executeDict(attrDict, args, getCompLocalNS(self._get_name())) else: devio = DevIO(getRandomEnum(tAttr.type)) addProperty(self, attribute.name, devio_ref=devio) break except: print_exc() continue
ec_cons.consumerReady() erc_cons = Consumer("ALMA_EVENT_RESPONSE_CHANNEL") erc_cons.addSubscription("Duration", eventHandler) erc_cons.consumerReady() #create the event dispatcher ed = EventDispatcher(FAKE_MS) #sleep for awhile giving consumers a chance to process a few #events sleep(60) ec_cons.disconnect() erc_cons.disconnect() ed.destroy() if EVENT_COUNTER["IDL:alma/FRIDGE/temperatureDataBlockEvent:1.0"] > 10: print "Good...enough temperatureDataBlockEvent's" else: print "Bad...not enough temperatureDataBlockEvent's" if EVENT_COUNTER["IDL:alma/xmlentity/XmlEntityStruct:1.0"] > 4: print "Good...enough XmlEntityStruct's" else: print "Bad...not enough XmlEntityStruct's" if EVENT_COUNTER["IDL:alma/acstime/Duration:1.0"] > 1 and EVENT_COUNTER[ "IDL:alma/acstime/Duration:1.0"] < EVENT_COUNTER[ "IDL:alma/FRIDGE/temperatureDataBlockEvent:1.0"]: print "Good...enough Durations have been received"