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. }