public async Task RunOneMessageEmulationAsync(string scenarioName, CancellationToken token) { Logger.SimulationStarted(_hostName, scenarioName); var produceMessagesForScenario = SimulationScenarios.GetScenarioByName(scenarioName); var messagingFactory = MessagingFactory .CreateFromConnectionString(_simulatorConfiguration.EventHubConnectionString); var messageSender = new MessageSender( messagingFactory: messagingFactory, config: _simulatorConfiguration, serializer: Serializer.ToJsonUTF8, telemetryPublisher: _instrumentationPublisher ); try { var scenario = produceMessagesForScenario(); var car = new Car("Single Message Car", scenario, messageSender.SendAsync); await car.RunOneMessageSimulationAsync(token); } finally { messagingFactory.Close(); } Logger.SimulationEnded(_hostName); }
private static async Task SimulateCarAsync( string deviceId, Func<MessagingEntry[]> produceMessagesForScenario, Func<string, object, Task<bool>> sendMessageAsync, TimeSpan waitBeforeStarting, IObserver<int> totalCount, CancellationToken token) { Logger.WarmingUpFor(deviceId, waitBeforeStarting); try { await Task.Delay(waitBeforeStarting, token); } catch (TaskCanceledException) { return; } var messagingEntries = produceMessagesForScenario(); var car = new Car(deviceId, messagingEntries, sendMessageAsync); car.ObservableEventCount .Sum() .Subscribe(total => Logger.Info("final count for {0} was {1}", deviceId, total)); car.ObservableEventCount .Subscribe(totalCount.OnNext); await car.RunSimulationAsync(token); }