/// <summary>
        /// Invoke this method before calling Execute(), to initialize the actor
        /// with details like the device id. SetupAsync() should be called only once.
        /// </summary>
        public void Setup(
            string deviceId,
            IDeviceStateActor deviceStateActor,
            IDeviceConnectionActor deviceConnectionActor,
            PropertiesLoopSettings loopSettings)
        {
            if (this.status != ActorStatus.None)
            {
                this.log.Error("The actor is already initialized",
                               () => new { CurrentDeviceId = this.deviceId });
                throw new DeviceActorAlreadyInitializedException();
            }

            this.deviceId              = deviceId;
            this.deviceStateActor      = deviceStateActor;
            this.deviceConnectionActor = deviceConnectionActor;
            this.loopSettings          = loopSettings;

            this.updatePropertiesLogic.Setup(this, this.deviceId);
            this.deviceSetDeviceTagLogic.Setup(this, this.deviceId);

            this.updatePropertiesLogic.Setup(this, this.deviceId);
            this.actorLogger.Setup(deviceId, "Properties");

            this.status = ActorStatus.ReadyToStart;
        }
Пример #2
0
        public SimulationRunner(
            IRateLimitingConfig ratingConfig,
            IRateLimiting rateLimiting,
            ISimulationConcurrencyConfig simulationConcurrencyConfig,
            ILogger logger,
            IDiagnosticsLogger diagnosticsLogger,
            IDeviceModels deviceModels,
            IDeviceModelsGeneration deviceModelsOverriding,
            IDevices devices,
            ISimulations simulations,
            IFactory factory)
        {
            this.connectionLoopSettings = new ConnectionLoopSettings(ratingConfig);
            this.propertiesLoopSettings = new PropertiesLoopSettings(ratingConfig);

            this.simulationConcurrencyConfig = simulationConcurrencyConfig;
            this.log = logger;
            this.diagnosticsLogger      = diagnosticsLogger;
            this.deviceModels           = deviceModels;
            this.deviceModelsOverriding = deviceModelsOverriding;
            this.devices     = devices;
            this.simulations = simulations;
            this.factory     = factory;

            this.startLock    = new { };
            this.running      = false;
            this.starting     = false;
            this.rateLimiting = rateLimiting;

            this.deviceStateActors      = new ConcurrentDictionary <string, IDeviceStateActor>();
            this.deviceConnectionActors = new ConcurrentDictionary <string, IDeviceConnectionActor>();
            this.deviceTelemetryActors  = new ConcurrentDictionary <string, IDeviceTelemetryActor>();
            this.devicePropertiesActors = new ConcurrentDictionary <string, IDevicePropertiesActor>();
        }
Пример #3
0
        public async Task InitAsync(Simulation simulation)
        {
            this.instance.InitOnce();

            var rateLimits = simulation.RateLimits;

            this.RateLimiting.Init(rateLimits);
            this.ConnectionLoopSettings = new ConnectionLoopSettings(rateLimits);
            this.PropertiesLoopSettings = new PropertiesLoopSettings(rateLimits);

            await this.Devices.InitAsync();

            this.instance.InitComplete();
        }
        public async Task InitAsync(Simulation simulation)
        {
            this.instance.InitOnce();

            // TODO: init using the simulation settings, not the defaults
            var defaultRatingConfig = this.factory.Resolve <IRateLimitingConfig>();

            this.RateLimiting.Init(defaultRatingConfig);
            this.ConnectionLoopSettings = new ConnectionLoopSettings(defaultRatingConfig);
            this.PropertiesLoopSettings = new PropertiesLoopSettings(defaultRatingConfig);

            await this.Devices.InitAsync();

            this.instance.InitComplete();
        }
        /// <summary>
        /// Invoke this method before calling Execute(), to initialize the actor
        /// with details like the device id.
        /// </summary>
        public void Init(
            ISimulationContext simulationContext,
            string deviceId,
            IDeviceStateActor deviceStateActor,
            IDeviceConnectionActor deviceConnectionActor,
            PropertiesLoopSettings loopSettings)
        {
            this.instance.InitOnce();

            this.simulationContext     = simulationContext;
            this.deviceId              = deviceId;
            this.deviceStateActor      = deviceStateActor;
            this.deviceConnectionActor = deviceConnectionActor;
            this.updatePropertiesLogic.Init(this, this.deviceId);
            this.actorLogger.Init(deviceId, "Properties");
            this.status = ActorStatus.ReadyToStart;

            this.instance.InitComplete();
        }
Пример #6
0
 public LoopSettingsTest(ITestOutputHelper logger)
 {
     this.log = logger;
     this.rateLimitingConfig = new Mock <IRateLimitingConfig>();
     this.propertiesTarget   = new PropertiesLoopSettings(this.rateLimitingConfig.Object);
 }