コード例 #1
0
        public override Task <CloudToDeviceMethodResult> InvokeDeviceMethodAsync(string deviceId,
                                                                                 CloudToDeviceMethod cloudToDeviceMethod,
                                                                                 CancellationToken cancellationToken)
        {
            TimeSpan timeout = GetInvokeDeviceMethodOperationTimeout(cloudToDeviceMethod);

            return(this.httpClientHelper.PostAsync <CloudToDeviceMethod, CloudToDeviceMethodResult>(
                       GetDeviceMethodUri(deviceId),
                       cloudToDeviceMethod,
                       timeout,
                       null,
                       null,
                       cancellationToken));
        }
コード例 #2
0
        public static async Task InvokeMethod(string deviceId, string methodName, string payload)
        {
            var methodInvocation = new MAD.CloudToDeviceMethod(methodName)
            {
                ResponseTimeout = TimeSpan.FromSeconds(30)
            };

            methodInvocation.SetPayloadJson(payload);

            var response = await serviceClient.InvokeDeviceMethodAsync(deviceId, methodInvocation);

            Console.WriteLine($"Response Status: {response.Status}");
            Console.WriteLine(response.GetPayloadAsJson());
        }
コード例 #3
0
        private Task <CloudToDeviceMethodResult> InvokeDeviceMethodAsync(Uri uri,
                                                                         CloudToDeviceMethod cloudToDeviceMethod,
                                                                         CancellationToken cancellationToken)
        {
            TimeSpan timeout = GetInvokeDeviceMethodOperationTimeout(cloudToDeviceMethod);

            return(_httpClientHelper.PostAsync <CloudToDeviceMethod, CloudToDeviceMethodResult>(
                       uri,
                       cloudToDeviceMethod,
                       timeout,
                       null,
                       null,
                       cancellationToken));
        }
コード例 #4
0
        /// <summary>
        /// Interactively invokes a method on a device.
        /// Additional 15s is added to the timeout in cloudToDeviceMethod to account for time taken to wire a request
        /// </summary>
        /// <param name="deviceId">The device identifier for the target device.</param>
        /// <param name="cloudToDeviceMethod">Parameters to execute a direct method on the device.</param>
        /// <param name="cancellationToken">A cancellation token to cancel the operation.</param>
        /// <returns>The <see cref="CloudToDeviceMethodResult"/>.</returns>
        /// <exception cref="ArgumentNullException">When <paramref name="deviceId"/> is null, empty string, or whitespace.</exception>
        /// <exception cref="ArgumentNullException">When <paramref name="cloudToDeviceMethod"/> is null.</exception>
        public virtual Task <CloudToDeviceMethodResult> InvokeDeviceMethodAsync(
            string deviceId,
            CloudToDeviceMethod cloudToDeviceMethod,
            CancellationToken cancellationToken = default)
        {
            if (string.IsNullOrWhiteSpace(deviceId))
            {
                throw new ArgumentNullException(nameof(deviceId));
            }
            if (cloudToDeviceMethod == null)
            {
                throw new ArgumentNullException(nameof(cloudToDeviceMethod));
            }

            return(InvokeDeviceMethodAsync(GetDeviceMethodUri(deviceId), cloudToDeviceMethod, cancellationToken));
        }
コード例 #5
0
        private static TimeSpan GetInvokeDeviceMethodOperationTimeout(CloudToDeviceMethod cloudToDeviceMethod)
        {
            // For InvokeDeviceMethod, we need to take into account the timeouts specified
            // for the Device to connect and send a response. We also need to take into account
            // the transmission time for the request send/receive
            var timeout           = TimeSpan.FromSeconds(15); // For wire time
            var connectionTimeOut = TimeSpan.FromSeconds(cloudToDeviceMethod.ConnectionTimeoutInSeconds ?? 0);
            var responseTimeOut   = TimeSpan.FromSeconds(cloudToDeviceMethod.ResponseTimeoutInSeconds ?? 0);

            ValidateTimeOut(connectionTimeOut);
            ValidateTimeOut(responseTimeOut);

            timeout += connectionTimeOut;
            timeout += responseTimeOut;

            return(timeout);
        }
コード例 #6
0
        /// <inheritdoc/>
        public override Task <JobResponse> ScheduleDeviceMethodAsync(
            string jobId,
            string queryCondition,
            CloudToDeviceMethod cloudToDeviceMethod,
            DateTime startTimeUtc,
            long maxExecutionTimeInSeconds,
            CancellationToken cancellationToken)
        {
            EnsureInstanceNotClosed();

            var jobRequest = new JobRequest
            {
                JobId                     = jobId,
                JobType                   = JobType.ScheduleDeviceMethod,
                CloudToDeviceMethod       = cloudToDeviceMethod,
                QueryCondition            = queryCondition,
                StartTime                 = startTimeUtc,
                MaxExecutionTimeInSeconds = maxExecutionTimeInSeconds
            };

            return(CreateJobAsync(jobRequest, cancellationToken));
        }
コード例 #7
0
        /// <inheritdoc/>
        public override Task <JobResponse> ScheduleDeviceMethodAsync(
            string jobId,
            IEnumerable <string> deviceIds,
            CloudToDeviceMethod cloudToDeviceMethod,
            DateTime startTimeUtc,
            long maxExecutionTimeInSeconds,
            CancellationToken cancellationToken)
        {
            this.EnsureInstanceNotClosed();

            var jobRequest = new JobRequest()
            {
                JobId                     = jobId,
                JobType                   = JobType.ScheduleDeviceMethod,
                CloudToDeviceMethod       = cloudToDeviceMethod,
                DeviceIds                 = deviceIds,
                StartTime                 = startTimeUtc,
                MaxExecutionTimeInSeconds = maxExecutionTimeInSeconds
            };

            return(this.CreateJobAsync(jobRequest, cancellationToken));
        }
コード例 #8
0
 public override Task <CloudToDeviceMethodResult> InvokeDeviceMethodAsync(string deviceId, CloudToDeviceMethod cloudToDeviceMethod)
 {
     return(this.InvokeDeviceMethodAsync(deviceId, cloudToDeviceMethod, CancellationToken.None));
 }
コード例 #9
0
        public override Task <CloudToDeviceMethodResult> InvokeDeviceMethodAsync(string deviceId, string moduleId, CloudToDeviceMethod cloudToDeviceMethod, CancellationToken cancellationToken)
        {
            if (string.IsNullOrWhiteSpace(deviceId))
            {
                throw new ArgumentNullException(nameof(deviceId));
            }

            if (string.IsNullOrWhiteSpace(moduleId))
            {
                throw new ArgumentNullException(nameof(moduleId));
            }

            return(InvokeDeviceMethodAsync(GetModuleMethodUri(deviceId, moduleId), cloudToDeviceMethod, cancellationToken));
        }
コード例 #10
0
 public override Task <CloudToDeviceMethodResult> InvokeDeviceMethodAsync(string deviceId,
                                                                          CloudToDeviceMethod cloudToDeviceMethod,
                                                                          CancellationToken cancellationToken)
 {
     return(InvokeDeviceMethodAsync(GetDeviceMethodUri(deviceId), cloudToDeviceMethod, cancellationToken));
 }
コード例 #11
0
 /// <summary>
 /// Creates a new Job to run a device method on one or multiple devices
 /// </summary>
 /// <param name="jobId">Unique Job Id for this job</param>
 /// <param name="queryCondition">Query condition to evaluate which devices to run the job on</param>
 /// <param name="cloudToDeviceMethod">Method call parameters</param>
 /// <param name="startTimeUtc">Date time in Utc to start the job</param>
 /// <param name="maxExecutionTimeInSeconds">Max execution time in seconds, i.e., ttl duration the job can run</param>
 /// <param name="cancellationToken">Task cancellation token</param>
 /// <returns>A JobResponse object</returns>
 public abstract Task <JobResponse> ScheduleDeviceMethodAsync(string jobId, string queryCondition, CloudToDeviceMethod cloudToDeviceMethod, DateTime startTimeUtc, long maxExecutionTimeInSeconds, CancellationToken cancellationToken);
コード例 #12
0
 /// <summary>
 /// Interactively invokes a method on device
 /// </summary>
 /// <param name="deviceId">Device Id</param>
 /// <param name="moduleId">Module Id</param>
 /// <param name="cloudToDeviceMethod">Device method parameters (passthrough to device)</param>
 /// <param name="cancellationToken">Cancellation Token</param>
 /// <returns>Method result</returns>
 public abstract Task <CloudToDeviceMethodResult> InvokeDeviceMethodAsync(string deviceId, string moduleId, CloudToDeviceMethod cloudToDeviceMethod, CancellationToken cancellationToken);
コード例 #13
0
 /// <summary>
 /// Interactively invokes a method on device
 /// </summary>
 /// <param name="deviceId">Device Id</param>
 /// <param name="moduleId">Module Id</param>
 /// <param name="cloudToDeviceMethod">Device method parameters (passthrough to device)</param>
 /// <returns>Method result</returns>
 public abstract Task <CloudToDeviceMethodResult> InvokeDeviceMethodAsync(string deviceId, string moduleId, CloudToDeviceMethod cloudToDeviceMethod);
コード例 #14
0
ファイル: JobClient.cs プロジェクト: v-gogur/azure-iot-sdks
 /// <summary>
 /// Creates a new Job to run a device method on one or multiple devices
 /// </summary>
 /// <param name="jobId">Unique Job Id for this job</param>
 /// <param name="deviceIds">List of devices to run the job on</param>
 /// <param name="cloudToDeviceMethod">Method call parameters</param>
 /// <param name="startTimeUtc">Date time in Utc to start the job</param>
 /// <param name="maxExecutionTimeInSeconds">Max execution time in seconds, i.e., ttl duration the job can run</param>
 /// <returns>A JobResponse object</returns>
 public abstract Task <JobResponse> ScheduleDeviceMethodAsync(string jobId, IEnumerable <string> deviceIds, CloudToDeviceMethod cloudToDeviceMethod, DateTime startTimeUtc, long maxExecutionTimeInSeconds);
コード例 #15
0
 /// <summary>
 /// Creates a new Job to run a device method on one or multiple devices
 /// </summary>
 /// <param name="jobId">Unique Job Id for this job</param>
 /// <param name="queryCondition">Query condition to evaluate which devices to run the job on</param>
 /// <param name="cloudToDeviceMethod">Method call parameters</param>
 /// <param name="startTimeUtc">Date time in Utc to start the job</param>
 /// <param name="maxExecutionTimeInSeconds">Max execution time in seconds, i.e., ttl duration the job can run</param>
 /// <returns>A JobResponse object</returns>
 public virtual Task <JobResponse> ScheduleDeviceMethodAsync(string jobId, string queryCondition, CloudToDeviceMethod cloudToDeviceMethod, DateTime startTimeUtc, long maxExecutionTimeInSeconds)
 {
     return(ScheduleDeviceMethodAsync(jobId, queryCondition, cloudToDeviceMethod, startTimeUtc, maxExecutionTimeInSeconds, CancellationToken.None));
 }