static void Main(string[] args)
        {
            Console.OutputEncoding = System.Text.Encoding.UTF8;
            var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");

            var configurationBuilder = new ConfigurationBuilder()
                                       .SetBasePath(Directory.GetCurrentDirectory())
                                       .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                                       .AddJsonFile($"appsettings.{environmentName}.json", optional: true, reloadOnChange: true)
                                       .AddJsonFile("appsettings.secrets.json", optional: true)
                                       .AddEnvironmentVariables();
            var config = configurationBuilder.Build();

            eventPublisher = new EventPublisher(config);

            var timerState = new ProducerState {
                Counter = 0
            };

            //Create a timer for producing the orders
            orderTimer = new Timer(
                callback: new TimerCallback(CreateOrder),
                state: timerState,
                dueTime: 1000,
                period: 2000);


            Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}: done.");

            CreateHostBuilder(args).Build().Run();
        }
Beispiel #2
0
        public void TestProducerState()
        {
            ProducerState state = new ProducerState(CreateProducerInfo(1));

            Assert.IsNotNull(state.Info);
            Assert.AreEqual(1, state.Info.ProducerId.Value);

            state.TransactionState = CreateTXState(1);

            Assert.IsNotNull(state.TransactionState);
        }
        public void SetState_GivenNewState_ShouldReturnFormerState(ProducerState initialState, ProducerState newState, ProducerState expected)
        {
            //Arrange
            var sut = new StateManager <ProducerState>(initialState, ProducerState.Closed);

            //Act
            var actual = sut.SetState(newState);

            //Assert
            actual.Should().Be(expected);
        }
        public void StateChangedFrom_GivenStateIsFinal_ShouldCompleteTask(ProducerState state)
        {
            //Arrange
            var sut = new StateManager <ProducerState>(ProducerState.Closed, ProducerState.Closed);

            //Act
            var task = sut.StateChangedFrom(state, default);

            //Assert
            task.IsCompleted.Should().BeTrue();
        }
        public void StateChangedFrom_GivenStateHasChanged_ShouldCompleteTask(ProducerState initialState, ProducerState fromState)
        {
            //Arrange
            var sut = new StateManager <ProducerState>(initialState, ProducerState.Closed);

            //Act
            var task = sut.StateChangedFrom(fromState, default);

            //Assert
            task.IsCompleted.Should().BeTrue();
        }
        public void StateChangedFrom_GivenStateHasNotChanged_ShouldNotCompleteTask(ProducerState state)
        {
            //Arrange
            var sut = new StateManager <ProducerState>(state, ProducerState.Closed);

            //Act
            var task = sut.StateChangedFrom(state, default);

            //Assert
            task.IsCompleted.Should().BeFalse();
        }
        public void StateChangedTo_GivenStateIsNotWanted_ShouldNotCompleteTask(ProducerState initialState, ProducerState wantedState)
        {
            //Arrange
            var sut = new StateManager <ProducerState>(initialState, ProducerState.Closed);

            //Act
            var task = sut.StateChangedTo(wantedState, default);

            //Assert
            task.IsCompleted.Should().BeFalse();
        }
        public void StateChangedTo_GivenStateIsAlreadyWanted_ShouldCompleteTask(ProducerState state)
        {
            //Arrange
            var sut = new StateManager <ProducerState>(state, ProducerState.Closed);

            //Act
            var task = sut.StateChangedTo(state, default);

            //Assert
            Assert.True(task.IsCompleted);
        }
        public void SetState_GivenStateIsFinal_ShouldNotChangeState(ProducerState newState)
        {
            //Arrange
            var sut = new StateManager <ProducerState>(ProducerState.Closed, ProducerState.Closed);

            //Act
            _ = sut.SetState(newState);

            //Assert
            sut.CurrentState.Should().Be(ProducerState.Closed);
        }
        public void SetState_GivenStateIsChangedToWanted_ShouldCompleteTask(ProducerState initialState, ProducerState newState)
        {
            //Arrange
            var sut  = new StateManager <ProducerState>(initialState, ProducerState.Closed);
            var task = sut.StateChangedTo(newState, default);

            //Act
            _ = sut.SetState(newState);

            //Assert
            task.IsCompleted.Should().BeTrue();
        }
Beispiel #11
0
        public void SetState_GivenStateIsChangedToNotWanted_ShouldNotCompleteTask(ProducerState initialState, ProducerState newState, ProducerState wantedState)
        {
            //Arrange
            var sut = new StateManager <ProducerState>(initialState, ProducerState.Closed);

            //Act
            var task = sut.StateChangedTo(wantedState, default);

            _ = sut.SetState(newState);

            //Assert
            Assert.False(task.IsCompleted);
        }
Beispiel #12
0
 public async ValueTask <ProducerState> OnStateChangeFrom(ProducerState state, CancellationToken cancellationToken)
 => await _state.StateChangedFrom(state, cancellationToken).ConfigureAwait(false);
Beispiel #13
0
 public async ValueTask <ProducerState> StateChangedFrom(ProducerState state, CancellationToken cancellationToken) => await _stateManager.StateChangedFrom(state, cancellationToken);
        /// <summary>
        /// Wait for the state to change from a specific state.
        /// </summary>
        /// <returns>
        /// The current state.
        /// </returns>
        /// <remarks>
        /// If the state change to a final state, then all awaiting tasks will complete.
        /// </remarks>
        public static async ValueTask <ProducerStateChanged> StateChangedFrom(this IProducer producer, ProducerState state, CancellationToken cancellationToken = default)
        {
            var newState = await producer.OnStateChangeFrom(state, cancellationToken).ConfigureAwait(false);

            return(new ProducerStateChanged(producer, newState));
        }
Beispiel #15
0
 internal ProducerStateChanged(IProducer producer, ProducerState producerState)
 {
     Producer      = producer;
     ProducerState = producerState;
 }
Beispiel #16
0
        public async ValueTask <ProducerStateChanged> StateChangedFrom(ProducerState state, CancellationToken cancellationToken)
        {
            var newState = await _state.StateChangedFrom(state, cancellationToken).ConfigureAwait(false);

            return(new ProducerStateChanged(this, newState));
        }
Beispiel #17
0
        private object GetModuleState(int moduleId)
        {
            object moduleState;
            switch (moduleId)
            {
                case 1:
                    moduleState = new ProducerState(new ProductionSource(new Commodity("GRAIN1", "Grain", UnitOfMeasurement.Kilogram, 0.001, false), 0.5, 1000));
                    break;
                case 2:
                    moduleState = new FarmingCollectiveState(GetCollective(1));
                    break;
                case 3:
                    moduleState = new ProducerState(new ProductionSource(new Commodity("POTAT1", "Potatoes", UnitOfMeasurement.Kilogram, 0.00075, false), 0.55, 1000));
                    break;
                case 4:
                    moduleState = new FarmingCollectiveState(GetCollective(2));
                    break;
                default:
                    moduleState = null;
                    break;
            }

            return moduleState;
            //return new ProducerState(new ProductionSource(new Commodity("GRAIN1", "Grain", UnitOfWeightMeasurement.Kilogram, 0.001, false), 0.5, 1000));
        }
Beispiel #18
0
 public bool IsFinalState(ProducerState state)
 => _state.IsFinalState(state);
Beispiel #19
0
 public async ValueTask <ProducerState> StateChangedTo(ProducerState state, CancellationToken cancellationToken)
 => await _state.StateChangedTo(state, cancellationToken);