예제 #1
0
 public SimRoute(SimScheduler scheduler, SimCluster network, RouteId route, RouteDef def)
 {
     _scheduler = scheduler;
     _network   = network;
     _route     = route;
     _factory   = new TaskFactory(_scheduler);
     _def       = def;
 }
예제 #2
0
        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);
        }
예제 #3
0
        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);
            }
        }
예제 #4
0
        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);
            }
        }
예제 #5
0
 public SimRuntime(ClusterDef def)
 {
     Def        = def;
     _scheduler = new SimScheduler(this, new ServiceId("simulation:proc"));
     _factory   = new TaskFactory(_scheduler);
 }