コード例 #1
0
ファイル: Program.cs プロジェクト: suneetnangia/IoTEdgeAccess
        private static async Task RunVirtualDevice(CancellationTokenSource cts, ServiceProvider serviceProvider, string deviceName, string deviceConnectionString, IDeviceHost module)
        {
            // Keep on looking for the new streams on IoT Hub when the previous one closes or aborts.
            while (!cts.IsCancellationRequested)
            {
                try
                {
                    // Run virtual device
                    var device = serviceProvider.GetServices <IStreamingDevice>()
                                 .FirstOrDefault(sd => sd.StreamDeviceName.Equals(deviceName, StringComparison.InvariantCulture));

                    using (var deviceClient = new DeviceClientWrapper(deviceConnectionString))
                    {
                        using (var clientWebSocket = new ClientWebSocketWrapper())
                        {
                            using (var tcpClient = new TcpClientWrapper())
                            {
                                Console.WriteLine($"{deviceName} awaiting connection...");
                                await module.OpenDeviceConnectionAsync(device, deviceClient, clientWebSocket, tcpClient, cts)
                                .ConfigureAwait(false);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Error: {ex.Message}");
                }
            }
        }
コード例 #2
0
        public static async Task SendDeviceToCloudMessageAsync(CancellationToken cancelToken)
        {
            var diagnosticProvider = new ProbabilityDiagnosticProvider(SamplingRateSource.Client, 50);
            var deviceClient       = DeviceClientWrapper.CreateFromConnectionString(deviceConnectionString, diagnosticProvider);

            const int avgWindSpeed = 10; // m/s
            var       rand         = new Random();

            while (true)
            {
                if (cancelToken.IsCancellationRequested)
                {
                    break;
                }

                var currentWindSpeed = avgWindSpeed + rand.NextDouble() * 4 - 2;

                var telemetryDataPoint = new
                {
                    windSpeed = currentWindSpeed
                };

                var messageString = JsonConvert.SerializeObject(telemetryDataPoint);
                var message       = new Message(Encoding.ASCII.GetBytes(messageString));
                await deviceClient.SendEventAsync(message);

                Console.WriteLine("{0} > Sending message: {1} | Count:{2}", DateTime.Now, messageString, diagnosticProvider.MessageNumber);
                await Task.Delay(500, cancelToken);
            }
        }
コード例 #3
0
        public void SetDefaultDiagnosticProviderWhenUserDoesNotProvideOne()
        {
            var deviceClient       = DeviceClientWrapper.CreateFromConnectionString(fakeConnectionString);
            var diagnosticProvider = deviceClient.GetDiagnosticProvider();

            Assert.AreEqual(diagnosticProvider.GetSamplingRateSource(), SamplingRateSource.None);
            Assert.AreEqual(diagnosticProvider.SamplingRatePercentage, 0);
        }
コード例 #4
0
        public void UserWillReceiveCustomTwinUpdate()
        {
            var fakeDiagnosticProvider = Substitute.For <IDiagnosticProvider>();

            var deviceClient = DeviceClientWrapper.CreateFromConnectionString(fakeConnectionString, fakeDiagnosticProvider);

            var userCallback = Substitute.For <DesiredPropertyUpdateCallback>();

            deviceClient.SetDesiredPropertyUpdateCallback(userCallback, new object());
            var twin = new Twin();

            twin.Properties.Desired["custom_settings"] = "xxxx";
            deviceClient.callbackWrapper(twin.Properties.Desired, new object());
            userCallback.Received(1).Invoke(Arg.Any <TwinCollection>(), Arg.Any <Object>());
        }
コード例 #5
0
        public void TransportSettingsDoNotContainMqttProtocal()
        {
            var transportSetting = new AmqpTransportSettings(TransportType.Amqp_Tcp_Only);

            ITransportSettings[] transportSettings = { transportSetting };

            Assert.ThrowsException <ProtocalNotSupportException>(() =>
            {
                DeviceClientWrapper.CreateFromConnectionString(fakeConnectionString, transportSettings);
            });

            var transportSetting2 = new MqttTransportSettings(TransportType.Mqtt_Tcp_Only);

            ITransportSettings[] transportSettings2 = { transportSetting2 };

            DeviceClientWrapper.CreateFromConnectionString(fakeConnectionString, transportSettings2);
        }
コード例 #6
0
        public void UserWillNotReceiveDiagnosticTwinUpdate()
        {
            var fakeDiagnosticProvider = Substitute.For <IDiagnosticProvider>();

            var deviceClient = DeviceClientWrapper.CreateFromConnectionString(fakeConnectionString, fakeDiagnosticProvider);

            DesiredPropertyUpdateCallback userCallback = (desiredProperties, context) =>
            {
                return(Task.Run(() =>
                {
                    if (desiredProperties.Contains("diag_enabled") || desiredProperties.Contains("diag_sample_rate"))
                    {
                        Assert.Fail();
                    }
                }));
            };

            deviceClient.SetDesiredPropertyUpdateCallback(userCallback, new object());
            var twin = new Twin();

            twin.Properties.Desired["diag_enable"]      = "true";
            twin.Properties.Desired["diag_sample_rate"] = "10";
            deviceClient.callbackWrapper(new TwinCollection(), new object());
        }
コード例 #7
0
        static async Task Main(string[] args)
        {
            System.Console.WriteLine("Hello World!");

            try
            {
                Configuration = new ConfigurationBuilder()
                                .SetBasePath(Directory.GetCurrentDirectory())
                                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                                //.AddEnvironmentVariables()
                                .Build();


                var serviceProvider = new ServiceCollection().AddLogging(cfg => cfg.AddConsole())
                                      .Configure <LoggerFilterOptions>(cfg => cfg.MinLevel = LogLevel.Debug).BuildServiceProvider();
                // get instance of logger
                logger = serviceProvider.GetService <ILogger <Program> >();
                // use the logger
                //logger.LogDebug("Woo Hooo");


                Log.Logger = new LoggerConfiguration()
                             .ReadFrom.Configuration(Configuration)
                             .CreateLogger();

                Log.Information("Logger is working! from program main");


                var certificatePath = Environment.GetEnvironmentVariable("ANTHEMGSDG_CERTPATH");


                //AppSettings.CertificateStoreOverride = string.IsNullOrEmpty(certificatePath) ? AppSettings.CertificateStoreOverride : certificatePath;
                var certificateStoreOverride = string.IsNullOrEmpty(certificatePath) ? "" : certificatePath;
                var clientCert = CryptoUtils.LoadCertificate("Dover Devices Client Certificate", "");
                if (clientCert == null)
                {
                    //log - factory.GetInstance<ILogger>().Error("Unable to locate a device certificate.");
                }

                var UuIdNumber = 3;

                var deviceRegistor = new DeviceIdGenerator(null, clientCert, PlatformID.Win32NT);
                deviceId = deviceRegistor.GenerateDeviceId(UuIdNumber).ToString();
                var certificate  = new X509Certificate2(clientCert);
                var deviceClient = new DeviceClientWrapper("jupiter-qa.azure-devices.net", deviceId, "Terminal",
                                                           certificate, Log.Logger, false);


                var loggerDeviceRegistrator = serviceProvider.GetService <ILogger <DeviceRegistrator> >();

                var devciDeviceRegistrator = new DeviceRegistrator(Log.Logger, deviceClient, new Func <string, IFlurlRequest>(Target), deviceId);

                await devciDeviceRegistrator.RegisterDevice();

                await PublishTelemetryManifest(deviceClient, CancellationToken.None);
                await SendAlert(deviceClient);

                var message = GetTelemetryMessages();
                for (int i = 0; i < 10; i++)
                {
                    await SendTelemetrySendDeviceToCloud(deviceClient, message);
                }
                System.Console.ReadLine();
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e);
            }
        }
コード例 #8
0
        public static async Task SendDeviceToCloudMessageAsync(CancellationToken cancelToken)
        {
            Console.ReadLine();
            var diagnosticProvider = new ProbabilityDiagnosticProvider(SamplingRateSource.Server);
            var deviceClient       = DeviceClientWrapper.CreateFromConnectionString(_deviceConnectionString, diagnosticProvider);

            const int avgWindSpeed             = 10;
            var       rand                     = new Random();
            var       count                    = 0;
            var       beforeStartSendTimeStamp = DateTime.Now;

            while (true)
            {
                count++;

                if (cancelToken.IsCancellationRequested)
                {
                    break;
                }

                var currentWindSpeed = avgWindSpeed + rand.NextDouble() * 4 - 2;

                var telemetryDataPoint = new
                {
                    windSpeed = currentWindSpeed
                };

                var messageString = JsonConvert.SerializeObject(telemetryDataPoint);
                var message       = new Message(Encoding.ASCII.GetBytes(messageString));

                try
                {
                    var timeout = 1000000;

                    Console.WriteLine("{0} > Start to send D2C message: {1} | Count:{2}", DateTime.Now, messageString, count);

                    var task = deviceClient.SendEventAsync(message);

                    if (await Task.WhenAny(task, Task.Delay(timeout)) == task)
                    {
                        Console.WriteLine("{0} > Sending D2C message success: {1} | Count:{2}", DateTime.Now, messageString, count);
                    }
                    else
                    {
                        Console.WriteLine("Send message timeout");
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Error occur when send D2C message:" + ex);
                }

                if (count == _maxMessageCount)
                {
                    break;
                }
                await Task.Delay(500, cancelToken);
            }
            var afterSendTimeStamp = DateTime.Now;
            var totalTimeConsume   = afterSendTimeStamp - beforeStartSendTimeStamp;

            Console.WriteLine($"StartTime: {beforeStartSendTimeStamp} | EndTime: {afterSendTimeStamp} | TotalTimeConsume: {totalTimeConsume.TotalMilliseconds}");
            Console.WriteLine("All task complete!");
        }