/// <summary> /// Callback on command received. /// </summary> /// <param name="commandRequest">information regarding the command received.</param> /// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns> protected override async Task <DigitalTwinCommandResponse> OnCommandRequest(DigitalTwinCommandRequest commandRequest) { Console.WriteLine($"\t Command - {commandRequest.Name} was invoked from the service"); Console.WriteLine($"\t Data - {commandRequest.Payload}"); Console.WriteLine($"\t Request Id - {commandRequest.RequestId}."); switch (commandRequest.Name) { case BlinkCommand: return(new DigitalTwinCommandResponse(StatusCodeCompleted, "{\"description\": \"abc\"}")); case RunDiagnosticsCommand: var t = Task.Run(async() => { Console.WriteLine("RunDiagnosticAsync started..."); // delay thread to simulate a long running operation await Task.Delay(5 * 1000).ConfigureAwait(false); string updateMessage = "25% complete"; Console.WriteLine(updateMessage); await this.UpdateAsyncCommandStatusAsync(new DigitalTwinAsyncCommandUpdate(commandRequest.Name, commandRequest.RequestId, StatusCodePending, updateMessage)).ConfigureAwait(false); await Task.Delay(5 * 1000).ConfigureAwait(false); updateMessage = "50% complete"; Console.WriteLine(updateMessage); await this.UpdateAsyncCommandStatusAsync(new DigitalTwinAsyncCommandUpdate(commandRequest.Name, commandRequest.RequestId, StatusCodePending, updateMessage)).ConfigureAwait(false); await Task.Delay(5 * 1000).ConfigureAwait(false); updateMessage = "75% complete"; Console.WriteLine(updateMessage); await this.UpdateAsyncCommandStatusAsync(new DigitalTwinAsyncCommandUpdate(commandRequest.Name, commandRequest.RequestId, StatusCodePending, updateMessage)).ConfigureAwait(false); await Task.Delay(5 * 1000).ConfigureAwait(false); updateMessage = "100% complete"; Console.WriteLine(updateMessage); Console.WriteLine("RunDiagnosticAsync done... Send status update."); await this.UpdateAsyncCommandStatusAsync(new DigitalTwinAsyncCommandUpdate(commandRequest.Name, commandRequest.RequestId, StatusCodeCompleted, updateMessage)).ConfigureAwait(false); }); return(new DigitalTwinCommandResponse(StatusCodePending, null)); case TurnOffLightCommand: await this.DeviceStatePropertyAsync(false); return(new DigitalTwinCommandResponse(StatusCodeCompleted, null)); case TurnOnLightCommand: await this.DeviceStatePropertyAsync(true); return(new DigitalTwinCommandResponse(StatusCodeCompleted, null)); default: Console.WriteLine($"Command name '{commandRequest.Name}' is not handled."); return(new DigitalTwinCommandResponse(StatusCodeNotImplemented, null)); } }
/// <summary> /// Callback on command received. /// </summary> /// <param name="commandRequest">information regarding the command received.</param> /// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns> protected override async Task <DigitalTwinCommandResponse> OnCommandRequest(DigitalTwinCommandRequest commandRequest) { // There is only one command that ModelDefinition defines, and it is getModelDefinition. That command must specify the // model Id in the payload, and the device must return the model definition in the command response payload if (getModelDefinitionCommandName.Equals(commandRequest.Name)) { string commandPayload = JsonConvert.DeserializeObject <string>(commandRequest.Payload); if (commandPayload.Equals(EnvironmentalSensorInterface.EnvironmentalSensorInterfaceId)) { return(new DigitalTwinCommandResponse(StatusCodeCompleted, this.environmentalSensorModelDefinition)); } } return(new DigitalTwinCommandResponse(StatusCodeNotImplemented, null)); }