#!/usr/bin/env python # Requires PyHLA, see http://www.nongnu.org/certi/PyHLA import hla.rti import hla.omt as fom import struct class MyFedAmbassador(hla.rti.FederateAmbassador): def initialize(self): print "Initialize" self.currTime = 0.0 self.deltaTime = 1.0 self.lookahead = 0.001 self.timeAdvanceGranted = False self.isRegulating = False print "Set regulating" myRtiAmb.enableTimeRegulation(self.currTime, self.lookahead) while (self.isRegulating == False): myRtiAmb.tick() print "Regulating set." self.interactionClassHandle = myRtiAmb.getInteractionClassHandle("SampleInteractionClass") self.textParameterHandle = myRtiAmb.getParameterHandle("TextParameter", self.interactionClassHandle) self.structParameterHandle = myRtiAmb.getParameterHandle("StructParameter", self.interactionClassHandle) self.fomParameterHandle = myRtiAmb.getParameterHandle("FOMParameter", self.interactionClassHandle) self.hlaasciistringParameterHandle = myRtiAmb.getParameterHandle("HLAASCIIstringParameter", self.interactionClassHandle) myRtiAmb.publishInteractionClass(self.interactionClassHandle) def terminate(self): print "Terminate" # RTI callbacks def timeRegulationEnabled(self, time): print "timeRegulationEnabled" self.isRegulating = True def timeAdvanceGrant(self, time): self.currTime = time self.timeAdvanceGranted = True print "Create RTI ambassador" myRtiAmb = hla.rti.RTIAmbassador() print myRtiAmb try: print "Create federation" myRtiAmb.createFederationExecution("si", "si.fed") print "Federation created." except hla.rti.FederationExecutionAlreadyExists: print "Federation already exists." print "Create federate ambassador" myFedAmb = MyFedAmbassador() print myFedAmb print "Join federation" myRtiAmb.joinFederationExecution("si-send", "si", myFedAmb) print "Federation joined." myFedAmb.initialize() try: for i in range(3): reqTime = myFedAmb.currTime + myFedAmb.deltaTime myFedAmb.timeAdvanceGranted = False myRtiAmb.timeAdvanceRequest(reqTime) while (myFedAmb.timeAdvanceGranted == False): myRtiAmb.tick() print "Send interaction" myRtiAmb.sendInteraction(myFedAmb.interactionClassHandle, {myFedAmb.textParameterHandle:"this is text", myFedAmb.structParameterHandle:struct.pack('hhl', 1, 2, 3), myFedAmb.fomParameterHandle:fom.HLAfloat32BE.pack(3.1416), myFedAmb.hlaasciistringParameterHandle:fom.HLAASCIIstring.pack("this is an HLA ASCII string")}, "sendInteraction", myFedAmb.currTime + myFedAmb.lookahead) except KeyboardInterrupt: pass myFedAmb.terminate() print "Resign from federation" myRtiAmb.resignFederationExecution(hla.rti.ResignAction.DeleteObjectsAndReleaseAttributes) print "Resigned from federation." print "Done."