30 lines
915 B
Python
Raw Normal View History

2024-05-15 16:36:13 +09:00
import random
2024-05-09 14:29:10 +09:00
import simpy
2024-05-23 17:11:23 +09:00
from config import Config, P2PConfig
2024-05-13 08:49:09 +09:00
from node import Node
2024-05-23 17:11:23 +09:00
from p2p import NaiveBroadcastP2P, GossipP2P
2024-05-09 19:37:39 +09:00
2024-05-09 14:29:10 +09:00
class Simulation:
2024-05-14 21:19:46 +09:00
def __init__(self, config: Config):
2024-05-15 16:36:13 +09:00
random.seed()
2024-05-14 21:19:46 +09:00
self.config = config
2024-05-09 14:29:10 +09:00
self.env = simpy.Environment()
2024-05-23 17:52:17 +09:00
self.p2p = Simulation.init_p2p(self.env, config)
nodes = [Node(i, self.env, self.p2p, config) for i in range(config.mixnet.num_nodes)]
self.p2p.set_nodes(nodes)
2024-05-09 14:29:10 +09:00
2024-05-14 21:19:46 +09:00
def run(self):
2024-05-17 14:54:23 +09:00
self.env.run(until=self.config.simulation.running_time)
2024-05-23 17:11:23 +09:00
@classmethod
def init_p2p(cls, env: simpy.Environment, config: Config):
match config.p2p.type:
case P2PConfig.TYPE_NAIVE:
return NaiveBroadcastP2P(env, config)
case P2PConfig.TYPE_GOSSIP:
return GossipP2P(env, config)
case _:
raise ValueError("Unknown P2P type")