Example #1
0
        /// <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));
            }
        }
Example #2
0
        /// <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));
        }