示例#1
0
    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()
示例#2
0
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
示例#3
0
文件: Simulator.py 项目: tstaig/ACS
class Simulator(
        CharacteristicComponent,  #Base IDL interface
        BaseSimulator,  #CORBA stubs for IDL interface
        ContainerServices,  #Developer niceties
        ComponentLifecycle):  #HLA stuff
    '''
    '''

    #------------------------------------------------------------------------------
    def __init__(self):
        '''
        Just call superclass constructors here.
        '''
        CharacteristicComponent.__init__(self)
        ContainerServices.__init__(self)
        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())

        #         # 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
    EVENT_COUNTER[ifr_id] = EVENT_COUNTER[ifr_id] + 1


if __name__=="__main__":
    
    ec_cons = Consumer("ALMA_EVENT_CHANNEL")
    ec_cons.addSubscription("temperatureDataBlockEvent", eventHandler)
    ec_cons.addSubscription("XmlEntityStruct", eventHandler)
    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:
示例#5
0
    EVENT_COUNTER[ifr_id] = EVENT_COUNTER[ifr_id] + 1


if __name__ == "__main__":

    ec_cons = Consumer("ALMA_EVENT_CHANNEL")
    ec_cons.addSubscription("temperatureDataBlockEvent", eventHandler)
    ec_cons.addSubscription("XmlEntityStruct", eventHandler)
    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: