-
Notifications
You must be signed in to change notification settings - Fork 0
/
sim.py
61 lines (47 loc) · 1.78 KB
/
sim.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import sys
import logging
from simulator.config import *
from simulator.topology import Topology, Get_Time
from simulator.event_queue import Event_Queue
class Sim(Topology):
def __init__(self, algorithm, event_file, step='NORMAL'):
super().__init__(algorithm, step)
self.load_command_file(event_file)
self.dump_sim()
self.dispatch_event(self.step)
self.logging.info("Total messages sent: %d" % self.message_count)
def __str__(self):
ans = "==== Print Topology ====\n"
ans += super().__str__()
ans += "==== Print Event ====\n"
ans += Event_Queue.Str()
return ans
def dump_sim(self):
self.logging.info("DUMP_SIM at Time %d\n" % Get_Time() + str(self))
def dispatch_event(self, step='NORMAL'):
e = Event_Queue.Get_Earliest()
while e:
e.dispatch()
if step == 'SINGLE_STEP':
self.logging.info(str(e))
self.wait()
e = Event_Queue.Get_Earliest()
def print_comment(self, comment):
self.logging.info('Time: %d, Comment: %s' % (Get_Time(), comment))
def main():
if len(sys.argv) < 3 or len(sys.argv) > 4 or sys.argv[1] not in ROUTE_ALGORITHM:
sys.stderr.write(USAGE_STR)
sys.exit(-1)
step = 'NO_STOP'
if len(sys.argv) == 4:
if sys.argv[3] not in STEP_COMMAND:
sys.stderr.write(USAGE_STR)
sys.exit(-1)
else:
step = sys.argv[3]
s = Sim(sys.argv[1], sys.argv[2], step)
if __name__ == '__main__':
# Try: python sim.py GENERIC demo.event
# Change logging level from DEBUG to INFO or WARNING, if DEBUG information bothers you
logging.basicConfig(level=logging.INFO, format=LOGGING_FORMAT, datefmt=LOGGING_DATAFMT)
main()