Exemple #1
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>();
        }
        /// <summary>
        /// Invoke this method before calling Execute(), to initialize the actor
        /// with details like the device model and message type to simulate.
        /// SetupAsync() should be called only once.
        /// </summary>
        public async Task SetupAsync(
            string deviceId,
            DeviceModel deviceModel,
            IDeviceStateActor deviceStateActor,
            ConnectionLoopSettings loopSettings)
        {
            if (this.status != ActorStatus.None)
            {
                this.log.Error("The actor is already initialized",
                               () => new { CurrentDeviceId = this.deviceId, NewDeviceModelName = deviceModel.Name });
                throw new DeviceActorAlreadyInitializedException();
            }

            this.deviceModel      = deviceModel;
            this.deviceId         = deviceId;
            this.deviceStateActor = deviceStateActor;
            this.loopSettings     = loopSettings;

            await this.credentialsSetupLogic.SetupAsync(this, this.deviceId, this.deviceModel);

            await this.fetchFromRegistryLogic.SetupAsync(this, this.deviceId, this.deviceModel);

            await this.registerLogic.SetupAsync(this, this.deviceId, this.deviceModel);

            await this.connectLogic.SetupAsync(this, this.deviceId, this.deviceModel);

            await this.deregisterLogic.SetupAsync(this, this.deviceId, this.deviceModel);

            await this.disconnectLogic.SetupAsync(this, this.deviceId, this.deviceModel);

            this.actorLogger.Init(deviceId, "Connection");

            this.status = ActorStatus.ReadyToStart;
        }
        /// <summary>
        /// Invoke this method before calling Execute(), to initialize the actor
        /// with details like the device model and message type to simulate.
        /// Init() should be called only once.
        /// </summary>
        public void Init(
            ISimulationContext simulationContext,
            string deviceId,
            DeviceModel deviceModel,
            IDeviceStateActor deviceStateActor,
            ConnectionLoopSettings loopSettings)
        {
            this.instance.InitOnce();

            this.simulationContext = simulationContext;
            this.deviceModel       = deviceModel;
            this.deviceId          = deviceId;
            this.deviceStateActor  = deviceStateActor;
            this.loopSettings      = loopSettings;

            this.credentialsSetupLogic.Init(this, this.deviceId, this.deviceModel);
            this.fetchFromRegistryLogic.Init(this, this.deviceId, this.deviceModel);
            this.registerLogic.Init(this, this.deviceId, this.deviceModel);
            this.connectLogic.Init(this, this.deviceId, this.deviceModel);
            this.deregisterLogic.Init(this, this.deviceId, this.deviceModel);
            this.disconnectLogic.Init(this, this.deviceId, this.deviceModel);
            this.actorLogger.Init(deviceId, "Connection");

            this.status = ActorStatus.ReadyToStart;

            this.instance.InitComplete();
        }
 public void Init(
     ISimulationContext simulationContext,
     string deviceId,
     DeviceModel deviceModel,
     IDeviceStateActor deviceStateActor,
     ConnectionLoopSettings loopSettings)
 {
     // TODO: will be implemented when SimulationManager is integrated.
 }