示例#1
0
        public static int Main(string[] args)
        {
            if (string.IsNullOrEmpty(deviceConnectionString) && args.Length > 0)
            {
                deviceConnectionString = args[0];
            }

            if (string.IsNullOrEmpty(deviceConnectionString))
            {
                Console.WriteLine("Please set a value for the environment variable \"DIGITAL_TWIN_DEVICE_CONNECTION_STRING\" or pass it in as an argument");
                Console.WriteLine("Press any key to exit");
                Console.ReadLine();
                return(0);
            }

            using (var deviceClient = DeviceClient.CreateFromConnectionString(deviceConnectionString, transportType))
            {
                DigitalTwinClient digitalTwinClient = new DigitalTwinClient(deviceClient);

                if (digitalTwinClient == null)
                {
                    Console.WriteLine("Failed to create DeviceClient!");
                    return(1);
                }

                var sample = new DigitalTwinClientSample(digitalTwinClient);
                sample.RunSampleAsync().GetAwaiter().GetResult();

                Console.WriteLine("Waiting to receive updates from cloud...");
                Console.WriteLine("Press any key to exit");
                Console.ReadLine();
            }

            return(0);
        }
示例#2
0
        public static async Task <int> Main(string[] args)
        {
            if (args.Length < 3)
            {
                Console.WriteLine("ProvisioningDeviceClientSymmetricKey <IDScope> <Secret> <registration>");
                return(1);
            }

            s_idScope = args[0];
            string primaryKey   = args[1];
            string secondaryKey = args[1];

            registrationId = args[2];

            SecurityProvider _security;

            using (var security = new SecurityProviderSymmetricKey(registrationId, primaryKey, secondaryKey))
                // Select one of the available transports:
                // To optimize for size, reference only the protocols used by your application.
                using (var transport = new ProvisioningTransportHandlerAmqp(TransportFallbackType.TcpOnly))
                // using (var transport = new ProvisioningTransportHandlerHttp())
                // using (var transport = new ProvisioningTransportHandlerMqtt(TransportFallbackType.TcpOnly))
                // using (var transport = new ProvisioningTransportHandlerMqtt(TransportFallbackType.WebSocketOnly))
                {
                    _security = security;
                    ProvisioningDeviceClient _provClient =
                        ProvisioningDeviceClient.Create(GlobalDeviceEndpoint, s_idScope, _security, transport);


                    Console.WriteLine($"RegistrationID = {_security.GetRegistrationID()}");
                    VerifyRegistrationIdFormat(_security.GetRegistrationID());

                    Console.Write("ProvisioningClient RegisterAsync . . . ");
                    DeviceRegistrationResult result = await _provClient.RegisterAsync().ConfigureAwait(false);

                    Console.WriteLine($"{result.Status}");
                    Console.WriteLine($"ProvisioningClient AssignedHub: {result.AssignedHub}; DeviceID: {result.DeviceId}");

                    if (result.Status != ProvisioningRegistrationStatusType.Assigned)
                    {
                        return(1);
                    }

                    IAuthenticationMethod auth;
                    if (_security is SecurityProviderTpm)
                    {
                        Console.WriteLine("Creating TPM DeviceClient authentication.");
                        auth = new DeviceAuthenticationWithTpm(result.DeviceId, (_security as SecurityProviderTpm));
                    }
                    else if (_security is SecurityProviderX509)
                    {
                        Console.WriteLine("Creating X509 DeviceClient authentication.");
                        auth = new DeviceAuthenticationWithX509Certificate(result.DeviceId, (_security as SecurityProviderX509).GetAuthenticationCertificate());
                    }
                    else if (_security is SecurityProviderSymmetricKey)
                    {
                        Console.WriteLine("Creating Symmetric Key DeviceClient authenication");
                        auth = new DeviceAuthenticationWithRegistrySymmetricKey(result.DeviceId, (_security as SecurityProviderSymmetricKey).GetPrimaryKey());
                    }
                    else
                    {
                        throw new NotSupportedException("Unknown authentication type.");
                    }

                    // using (var deviceClient = DeviceClient.CreateFromConnectionString(deviceConnectionString, transportType))
                    using (DeviceClient deviceClient = DeviceClient.Create(result.AssignedHub, auth, TransportType.Amqp))
                    {
                        //
                        DigitalTwinClient digitalTwinClient = new DigitalTwinClient(deviceClient);

                        if (digitalTwinClient == null)
                        {
                            Console.WriteLine("Failed to create DeviceClient!");
                            return(1);
                        }

                        var sample = new DigitalTwinClientSample(digitalTwinClient);
                        await sample.RunSampleAsync();

                        Console.WriteLine("Waiting to receive updates from cloud...");
                        Console.WriteLine("Press any key to exit");
                        Console.ReadLine();
                    }
                }
            return(0);
        }