static async Task SendEvents()

in edge-modules/SimulatedTemperatureSensor/src/Program.cs [190:269]


        static async Task SendEvents(
            ModuleClient moduleClient,
            int messageCount,
            SimulatorParameters sim,
            CancellationTokenSource cts)
        {
            int count = 1;
            double currentTemp = sim.MachineTempMin;
            double normal = (sim.MachinePressureMax - sim.MachinePressureMin) / (sim.MachineTempMax - sim.MachineTempMin);

            while (!cts.Token.IsCancellationRequested && (SendUnlimitedMessages(messageCount) || messageCount >= count))
            {
                if (Reset)
                {
                    currentTemp = sim.MachineTempMin;
                    Reset.Set(false);
                }

                if (currentTemp > sim.MachineTempMax)
                {
                    currentTemp += Rnd.NextDouble() - 0.5; // add value between [-0.5..0.5]
                }
                else
                {
                    currentTemp += -0.25 + (Rnd.NextDouble() * 1.5); // add value between [-0.25..1.25] - average +0.5
                }

                if (sendData)
                {
                    var tempData = new MessageBody
                    {
                        Machine = new Machine
                        {
                            Temperature = currentTemp,
                            Pressure = sim.MachinePressureMin + ((currentTemp - sim.MachineTempMin) * normal),
                        },
                        Ambient = new Ambient
                        {
                            Temperature = sim.AmbientTemp + Rnd.NextDouble() - 0.5,
                            Humidity = Rnd.Next(24, 27)
                        },
                        TimeCreated = DateTime.UtcNow
                    };

                    string dataBuffer = JsonConvert.SerializeObject(tempData);
                    var eventMessage = new Message(Encoding.UTF8.GetBytes(dataBuffer));
                    eventMessage.ContentEncoding = "utf-8";
                    eventMessage.ContentType = "application/json";
                    eventMessage.Properties.Add("sequenceNumber", count.ToString());
                    eventMessage.Properties.Add("batchId", BatchId.ToString());
                    logger.LogInformation($"Sending message: {count}, Body: [{dataBuffer}]");
                    try
                    {
                        await moduleClient.SendEventAsync("temperatureOutput", eventMessage, cts.Token);
                    }
                    catch (OperationCanceledException)
                    {
                        logger.LogError($"SendEvents has been canceled, sent {count - 1} messages.");
                        return;
                    }

                    count++;
                }

                try
                {
                    await Task.Delay(messageDelay, cts.Token);
                }
                catch (TaskCanceledException)
                {
                    logger.LogError($"SendEvents has been canceled, sent {count - 1} messages.");
                    return;
                }
            }

            if (messageCount < count)
            {
                logger.LogInformation($"Done sending {messageCount} messages");
            }
        }