Package mosp_examples :: Module external_controlled_random_wiggler
[hide private]
[frames] | no frames]

Source Code for Module mosp_examples.external_controlled_random_wiggler

 1  #!/bin/env python 
 2   
 3  """ External-controlled simulation example 
 4      - random movement 
 5      - output to visual player, which is executed as child process 
 6      - this simulation is steered by an external entity via TCP socket connection 
 7      - uses SimulationControlled 
 8      - use mosp/controller.py for simple demo control 
 9  """ 
10   
11  import sys 
12  sys.path.append("..") 
13  import time 
14  import random 
15   
16  from mosp.core import Person, Simulation 
17  from mosp.controller import SimulationControlled, Ticker 
18  from mosp.geo import osm 
19  from mosp.locations import Cafe 
20  from mosp.impl import movement 
21  from mosp.monitors import * 
22   
23  __author__ = "B. Henne, P. Tute" 
24  __contact__ = "henne@dcsec.uni-hannover.de" 
25  __copyright__ = "(c) 2010-2012, DCSec, Leibniz Universitaet Hannover, Germany" 
26  __license__ = "GPLv3" 
27   
28   
29 -class RandomWiggler(Person):
30 """Implements a simple person doing only random movement on the map. 31 @author: P. Tute""" 32 next_target = movement.person_next_target_random 33 first_time = True 34
35 - def act_at_node(self, node):
36 """Implementation of act_at_node: remove person from sim and send it to another sim.""" 37 worldobject = node.worldobject 38 if worldobject is not None: 39 if isinstance(worldobject, Cafe): 40 if self.first_time: 41 self.first_time = False 42 self.sim.del_person(self) 43 self.sim.send_person(self, node.id) 44 self.last_node = self.next_node 45 else: 46 self.first_time = True
47
48 -def main(get_nodes=False):
49 """Defines the simulation, map, monitors, persons.""" 50 t = time.time() 51 if not get_nodes: 52 try: 53 name = sys.argv[1] 54 port = int(sys.argv[2]) 55 except IndexError: 56 print 'No name or port number specified!' 57 print 'Usage: python external-controlled_random_wiggler.py NAME PORT' 58 sys.exit(-1) 59 s = SimulationControlled(geo=osm.OSMModel('../data/minimap0.osm'), name=name, host='localhost', port=port, rel_speed=40) 60 print time.time() - t 61 #m = s.add_monitor(EmptyMonitor, 2) 62 m = s.add_monitor(SocketPlayerMonitor, 1) 63 s.add_persons(RandomWiggler, 1, monitor=m) 64 for p in [node for node in s.geo.way_nodes if "amenity" in node.tags and node.tags["amenity"] == "cafe"]: 65 c = Cafe(p.tags['name'], s) 66 p.worldobject = c 67 s.activate(c, c.serve(), 0) 68 s.run(until=1000000, real_time=True, monitor=True) 69 else: 70 s = Simulation(geo=osm.OSMModel('../data/minimap0.osm'), rel_speed=40) 71 for p in [node for node in s.geo.way_nodes if "amenity" in node.tags and node.tags["amenity"] == "cafe"]: 72 print p.id, p.lat, p.lon, s.geo.map_nodeid_osmnodeid[p.id]
73 74 75 if __name__ == '__main__': 76 if 'nodes' in sys.argv: 77 main(True) 78 else: 79 main() 80