Ejemplo n.º 1
0
        private static Task Run(IComponentContext c)
        {
            #region DI_Load
            var broker        = c.Resolve <EventBroker>();
            var begin         = DateTimeOffset.Parse("2019-01-01");
            var timeScheduler = new ModelTimeScheduler(ModelTimeStep.Day, begin);

            var manager = c.Resolve <Manager>(new NamedParameter("timeScheduler", timeScheduler));
            var dev1    = c.Resolve <Developer>(
                new NamedParameter("timeScheduler", timeScheduler),
                new NamedParameter("name", "Борис"));
            var dev2 = c.Resolve <Developer>(
                new NamedParameter("timeScheduler", timeScheduler),
                new NamedParameter("name", "Дмитрий"));
            var dev3 = c.Resolve <Developer>(
                new NamedParameter("timeScheduler", timeScheduler),
                new NamedParameter("name", "Илья"));
            #endregion

            var loop = new EventLoop(timeScheduler, broker);

            var a = ModelTimeSpan.FromModelTimeUnits(3);

            timeScheduler.Schedule(ModelTimeSpan.FromModelTimeUnits(3), () =>
            {
                Console.WriteLine("Случается на 3 шаге модельного времени");
            });
            return(loop.Run(time =>
            {
                time.OnUniformTestPassed(t =>
                {
                    manager.GiveNewTaskToTeam("'Важная задача'");
                }, density: 0.5);
            }, 15));
        }
Ejemplo n.º 2
0
        public EventLoop(ModelTimeScheduler scheduler, IObservable <IRxModellingEvent> broker)
        {
            var cts = new CancellationTokenSource();

            CancellationTokenSource = cts;
            TimeScheduler           = scheduler;
            EventBroker             = broker;
        }
Ejemplo n.º 3
0
 public Developer(ModelTimeScheduler timeScheduler, EventBroker broker, string name) : base(timeScheduler, broker)
 {
     Name = name;
     broker.OfType <NewDemandingsPublished>().Subscribe(demand =>
     {
         AbortCurrentJob();
         DevelopTask(demand.Description);
     });
 }
Ejemplo n.º 4
0
        public void TimeSpansFromDateOperateCorrect(ModelTimeStep modelStep, ModelTimeStep spanStep, int res)
        {
            var now       = DateTimeOffset.Parse("2019-01-01");
            var scheduler = new ModelTimeScheduler(modelStep, now);

            var transform  = scheduler.GetType().GetMethod("FromModelTimeUnits", BindingFlags.NonPublic | BindingFlags.Instance);
            var multiplier = ModelTimeScheduler.GetTimeSpanMultiplier(modelStep, spanStep);

            Assert.Equal(multiplier, res);
        }
Ejemplo n.º 5
0
        //[Fact]
        public void DisposingLetNoEventsBeDispatched()
        {
            var brokerMock    = new Mock <IObservable <IRxModellingEvent> >();
            var timeScheduler = new ModelTimeScheduler(ModelTimeStep.Day, DateTimeOffset.Parse("2019-01-01"));

            var loop = new EventLoop(timeScheduler, brokerMock.Object);

            loop.Run(time =>
            {
                time.OnUniformTestPassed(t =>
                {
                }, 0.2);
            }, 15);

            Thread.Sleep(80);

            loop.Dispose();
            Console.WriteLine("loop disposed");
            Thread.Sleep(TimeSpan.FromSeconds(10));
        }
Ejemplo n.º 6
0
        public async Task UniformTestProvidesFairEventDensity(double eventStreamDensity)
        {
            var brokerMock     = new Mock <IObservable <IRxModellingEvent> >();
            var timeScheduler  = new ModelTimeScheduler(ModelTimeStep.Day, DateTimeOffset.Parse("2019-01-01"));
            var triggeredTimes = 0;

            var loop = new EventLoop(timeScheduler, brokerMock.Object);
            await loop.Run(time =>
            {
                time.OnUniformTestPassed(t =>
                {
                    triggeredTimes++;
                }, eventStreamDensity);
            }, LongSimulationTimeInTicks);

            var actualDensity = (double)triggeredTimes / LongSimulationTimeInTicks;

            _output.WriteLine($"exp: {eventStreamDensity} vs act: {actualDensity}");
            AssertPlus.EqualFloats(
                expected: eventStreamDensity,
                actual: (double)triggeredTimes / LongSimulationTimeInTicks
                );
        }
Ejemplo n.º 7
0
 public Actor(ModelTimeScheduler timeScheduler, EventBroker broker)
 {
     TimeScheduler = timeScheduler;
     this.Broker   = broker ?? throw new ArgumentNullException(paramName: nameof(broker));
 }
Ejemplo n.º 8
0
 public Manager(ModelTimeScheduler timeScheduler, EventBroker broker) : base(timeScheduler, broker)
 {
 }