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)); }
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()); }
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)); }
/// <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)); }
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); }
/// <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)); }
/// <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)); }
public override Task <CloudToDeviceMethodResult> InvokeDeviceMethodAsync(string deviceId, CloudToDeviceMethod cloudToDeviceMethod) { return(this.InvokeDeviceMethodAsync(deviceId, cloudToDeviceMethod, CancellationToken.None)); }
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)); }
public override Task <CloudToDeviceMethodResult> InvokeDeviceMethodAsync(string deviceId, CloudToDeviceMethod cloudToDeviceMethod, CancellationToken cancellationToken) { return(InvokeDeviceMethodAsync(GetDeviceMethodUri(deviceId), cloudToDeviceMethod, cancellationToken)); }
/// <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);
/// <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);
/// <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);
/// <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);
/// <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)); }