def handle(self,obj): """ This function takes a LMCP.object and does the right thing with it obj can contain ServicePlannerConfiguration or ServicePlannerRequest if it is a Configuration we modify config and load a new region. This type of message will reset the infostate, so one must resend any outstanding requests. This type of message is typically only used once at the beginning. if it is a plan request, we update the infostate and return a plan. This is the normal usage. """ if isinstance(obj,ServicePlannerConfiguration.ServicePlannerConfiguration): #config.enableModification() nameprefix = '_%s__'%obj.__class__.__name__ for k,v in confnames.items(): attrname = nameprefix+v if hasattr(obj,attrname): setattr(config,k,getattr(obj,attrname)) for k,v in obj.__dict__.items(): if (k.startswith('__') and not k.endswith('_') and k not in notconfnames): print k setattr(config,k,v) #config.disableModification() try: region = lmcpio.createRegion(obj.get_Region()) except: region = None if region is None: print ("expected a region in Configuration message\n" "falling back to plannermodule.region") #pdb.set_trace() else: self.region = region self.planner = self.plannerfactory(region) self.infostate = InfoState( self.region, sensor_radius=config.sensor_radius, nagents=config.nagents, locations=None, speed=config.speed) networkregion = lmcpio.createNetwork(self.region) return LMCPFactory.packMessage(networkregion,True) elif isinstance(obj,ServicePlannerRequest.ServicePlannerRequest): if True:#try: lmcplocs = obj.get_AgentLocations() lmcpevent = obj.get_NewEvent() dvrpevent = lmcpio.lmcpEvent2dvrpEvent(lmcpevent) dvrplocs = [lmcpio.lmcpLoc2dvrpLoc(l) for l in lmcplocs] else:#except Exception, err: print err pdb.set_trace() event = dvrpevent self.infostate.update(event,dvrplocs) self.logStatus(event) requests,belief = self.infostate.getRequests(),self.infostate.getBelief() plan = self.planner.plan(belief,requests,dvrplocs) #pdb.set_trace() self.infostate.setPlan(plan) #pdb.set_trace() message = lmcpio.plansToMessage(plan)#,self.infostate.region) return message elif(isinstance(obj,RequestConfiguration.RequestConfiguration)): try: networkregion = lmcpio.createNetwork(self.region) return LMCPFactory.packMessage(networkregion,True) except Exception, err: print err pdb.set_trace()
#pdb.set_trace() self.infostate.setPlan(plan) #pdb.set_trace() message = lmcpio.plansToMessage(plan)#,self.infostate.region) return message elif(isinstance(obj,RequestConfiguration.RequestConfiguration)): try: networkregion = lmcpio.createNetwork(self.region) return LMCPFactory.packMessage(networkregion,True) except Exception, err: print err pdb.set_trace() else: print "unknown message-object" pdb.set_trace() return lmcpio.plansToMessage([SNPlan([],region=self.region) for i in range(config.nagents)]) def run(self): #maxiters = config.maxiters #iter = 0 while(True):#iter<=10): self.listen() #iter += 1 def loadAndRun(regionfile): region = GoogleSN(io.CNFromXML(regionfile)) infostate = InfoState( region, sensor_radius=config.sensor_radius, nagents=config.nagents, locations=None, speed=config.speed)