public SimRoute(SimScheduler scheduler, SimCluster network, RouteId route, RouteDef def) { _scheduler = scheduler; _network = network; _route = route; _factory = new TaskFactory(_scheduler); _def = def; }
public SimService(SimMachine machine, ServiceId id, Func <IEnv, IEngine> launcher) { Id = id; _launcher = launcher; _machine = machine; _scheduler = new SimScheduler(machine.Runtime, id); _factory = new TaskFactory(_scheduler); }
public void Schedule(SimScheduler id, TimeSpan offset, object message) { _steps++; if (offset == Timeout.InfiniteTimeSpan) { FutureQueue.Schedule(id, SimFutureQueue.Never, message); } else { var pos = _time + offset.Ticks; FutureQueue.Schedule(id, pos, message); } }
public SimCluster(ClusterDef cluster, SimRuntime runtime) { Runtime = runtime; Rand = Runtime.Rand; // we register each link as a network service foreach (var(id, def) in cluster.Routes) { var service = new ServiceId($"network:{id.Source}->{id.Destinaton}"); var scheduler = new SimScheduler(Runtime, service); Routes.Add(id, new SimRoute(scheduler, this, id, def)); } foreach (var machine in cluster.Services.GroupBy(i => i.Key.Machine)) { var m = new SimMachine(machine.Key, runtime, this); foreach (var pair in machine) { m.Install(pair.Key, pair.Value); } Machines.Add(machine.Key, m); } }
public SimRuntime(ClusterDef def) { Def = def; _scheduler = new SimScheduler(this, new ServiceId("simulation:proc")); _factory = new TaskFactory(_scheduler); }