From 406a86769e6381db50c1d2ccb5119fff0f80adbf Mon Sep 17 00:00:00 2001 From: Marc Duiker Date: Fri, 3 Feb 2023 17:20:21 +0100 Subject: [PATCH] new structure of README --- actors/csharp/sdk/README.md | 98 ++++++++++++++++++++++++++++++++++++- 1 file changed, 97 insertions(+), 1 deletion(-) diff --git a/actors/csharp/sdk/README.md b/actors/csharp/sdk/README.md index f0c25e90..db55f0b6 100644 --- a/actors/csharp/sdk/README.md +++ b/actors/csharp/sdk/README.md @@ -1,9 +1,105 @@ # Dapr Actors (Dapr SDK) **In Development -In this quickstart, you'll create an Actor service to demonstrate Dapr's Actors API to work stateful objects. The service represents the digital twin for a smart device, a "smart smoke detector", that has state including alarm status, battery, and firmware version. Multiple Actors can have interactions like signaling an alarm to the others. There is also a Controller actor that can query for all status, battery, and perform calculations like % of devices with low battery. +In this quickstart, you'll create an Actor service to demonstrate Dapr's Actors API to work stateful objects. The service represents the digital twin for a smart device, a "smart smoke detector", that has state including a location and a status. Multiple Actors can have interactions like signaling an alarm to the others. There is also a Controller actor that can reset the status for all devices. Visit [this](https://docs.dapr.io/developing-applications/building-blocks/actors/actors-overview/) link for more information about Dapr and Actors. +--- + +//TODO in general in this README: + +1. Refer to .NET source code for more details on the implementation. +2. Change HTTP calls to use cURL + +--- + +## Objective 1: Activate SmartDetectorActors via HTTP + +Dapr actors are so-called virtual actors. As soon as you call an actor method, the actor is activated and the method is executed. The actor is deactivated after a configurable period of time (idle timeout). Any state that belongs to the actor is persisted in a state store. So if you call the same actor after the idle timeout, the actor is reactivated and the state is restored. + +1. Run the `SmartDeviceService`, which will start the Dapr sidecar and the service itself: + + ```bash + cd ./smartdevice.Service + + dapr run --app-id myapp --app-port 5001 --dapr-http-port 3500 --components-path ../../../resources -- dotnet run --urls=http://localhost:5001/ + ``` + +2. Create a `SmartDetectorActor` with actorId `1` and set the location to `First Floor`, and status to `Ready`: + + ``` + POST http://localhost:/v1.0/actors/SmartDetectorActor/1/method/init + Content-Type: application/json + + { + "location": "First Floor", + "status": "Ready", + } + ``` + +3. Read the `status` field of the `SmartDetectorActor` with actorId `1`: + + ``` + GET http://localhost:/v1.0/actors/SmartDetectorActor/1/state/status + ``` + + The response should be: + + ``` + { + "status": "Ready" + } + ``` + +4. Create another `SmartDetectorActor`, now with actorId `2`, location `Second Floor,` and status `Ready`: + + ``` + POST http://localhost:/v1.0/actors/SmartDetectorActor/2/state + Content-Type: application/json + + { + "location": "Second Floor", + "status": "Ready", + } + ``` + +## Objective 2: Call a SmartDetectorActor method that triggers another Actor method + +When a `SmartDetectorActor` detects a fire, the other `SmartDetectorActor` should be signaled so they both sound the alarm. The `ControllerActor` is aware of all `SmartDetectorActor`s and can signal them all. When `SmartDetectorActor` 1 detects a fire, it calls the `SignalAlarm` method on the `ControllerActor` which in turn calls the `SignalAlarm` method `SmartDetectorActor` 2. + +1. Ensure that the `SmartDeviceService` and Dapr sidecar are still running. +2. Make a request to `SmartDetectorActor` with actorId `1` and call the `SignalAlarm` method: + + ``` + POST http://localhost:/v1.0/actors/SmartDetectorActor/1/method/signalAlarm + ``` + + The log output of the `SmartDeviceService` should show that the `SignalAlarm` method was called on `SmartDetectorActor` 1 and 2: + + //TODO + +3. You can also read the `status` field of the `SmartDetectorActor`s: + + ``` + GET http://localhost:/v1.0/actors/SmartDetectorActor/1/state/status + ``` + + The response should be: + + ``` + { + "status": "Alarm" + } + ``` + +## Objective 3: Use the ControllerActor to reset the status of all SmartDetectorActors + +In case of a false alarm, the `ControllerActor` can reset the status of all `SmartDetectorActor`s to `Ready`. + +// TODO + +--- + > **Note:** This example leverages the Dapr SDK. This quickstart includes three services and some common interfaces: