{"templateId":"openapi_docs","sharedDataIds":{"openAPIDocsStore":"oas-solutions/fdplan/apis/FDPlan-Evaluation.yaml","sidebar":"sidebar-apis/sidebars.yaml"},"props":{"definitionId":"solutions/fdplan/apis/FDPlan-Evaluation.yaml","dynamicMarkdocComponents":[],"baseSlug":"/solutions/fdplan/apis/fdplan-evaluation","seo":{"title":"Evaluation","lang":"en-US","meta":[{"name":"robots","content":"noindex"}],"llmstxt":{"hide":true,"excludeFiles":[]}},"itemId":"","disableAutoScroll":true,"metadata":{"type":"openapi","title":"Evaluation","description":"The Evaluation API is responsible for evaluation workflows in FDPlan. The\nkey features of the API include:\n\n* The ability to create custom evaluation workflows.\n* The ability to drive custom evaluation workflows and computations.\n\nThe key API concepts include:\n\n* **workflow-specs**: A workflow-spec is a workflow specification defining\n  all the computation specifications which form the workflow. A workflow\n  specification also defines the edges which connect computations together\n  in a graph. These edges connect an output from one computation\n  specification to the input of another.\n  A number of default 'system' workflow specifications are provided to the\n  user. Details of these 'system' workflow specifications can be discovered\n  by using the API to get all workflow specifications.\n\n* **computation-specs**: A computation-spec is a computation specification\n  which defines all the input and output data-types for the computation.\n  A number of default 'system' computation specifications are provided to\n  the user.  Details of these 'system' computation specifications can be\n  discovered by using the API to get all computation specifications.\n\n* **data-types**: A data-type is a specification for a data representation\n  which is required as one of a computation-spec's inputs or produced as\n  one of a computation-spec's outputs.\n  A number of default 'system' data-types are provided to the user. Details\n  of these 'system' data-types can be discovered by using the API to get all\n  data-types.\n\n* **computation**: A computation is an instance of a computation-spec for a\n  running workflow. It encapsulates the state of the computation\n  (i.e. running, succeeded), input/output data containers which have been\n  associated with the computation and any errors which have occurred during\n  the running of the computation. The input and output data containers\n  associated with the computation can be accessed through the containers API\n  operations.\n\n* **container**: A container is a resource which holds all the data for a\n  given data-type definition.\n\n* **schema**: A schema is a formal description of a data-type. It defines\n  the structure of the data-type against which data can be validated.\n  A number of default schemas for 'system' data-types are provided for the\n  user.\n  Currently only JSON schemas are supported, for more information see\n  [JSON Schema](https://json-schema.org/).\n  Schemas defined in the OSDU schema service may be used to describe\n  evaluation data-types by using their unique identifiers in schema\n  references, e.g. osdu:wks:wellbore:1.0.0.\n\nBelow is the list of Client IDs for FDPlan Services.\n```plain {% title=\"Client ID\" %}\nprod-nam-services-fdplan.slbservice.com\nprod-eu-services-fdplan.slbservice.com\nprod-au-services-fdplan.slbservice.com\nprod-id-services-fdplan.slbservice.com\nproduction-services-fdplan.slbservice.com\n```\n"},"compilationErrors":[],"markdown":{"partials":{"solutions/agora/_partials/tutorial/busclienttutorial.md":{"$$mdtype":"Node","errors":[],"lines":[],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[0,1],"inline":false,"attributes":{"level":2},"children":[{"$$mdtype":"Node","errors":[],"lines":[0,1],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[0,1],"inline":true,"attributes":{"content":"Bus Client Tutorial"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":0},"end":{"line":1}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":0},"end":{"line":1}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":0},"end":{"line":1}}},{"$$mdtype":"Node","errors":[],"lines":[2,3],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[2,3],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[2,3],"inline":true,"attributes":{"content":"Namespace: "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":2},"end":{"line":3}}},{"$$mdtype":"Node","errors":[],"lines":[2,3],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[2,3],"inline":true,"attributes":{"content":"Agora.Edge"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":2},"end":{"line":3}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":2},"end":{"line":3}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":2},"end":{"line":3}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":2},"end":{"line":3}}},{"$$mdtype":"Node","errors":[],"lines":[4,5],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[4,5],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[4,5],"inline":true,"attributes":{"content":"The BusClient is an integral part of Edge SDK and is implemented as a Singleton.  The purpose of the "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":4},"end":{"line":5}}},{"$$mdtype":"Node","errors":[],"lines":[4,5],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[4,5],"inline":true,"attributes":{"content":"BusClient"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":4},"end":{"line":5}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":4},"end":{"line":5}}},{"$$mdtype":"Node","errors":[],"lines":[4,5],"inline":true,"attributes":{"content":" is to send and receive messages using the NATS broker."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":4},"end":{"line":5}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":4},"end":{"line":5}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":4},"end":{"line":5}}},{"$$mdtype":"Node","errors":[],"lines":[6,7],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[6,7],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[6,7],"inline":true,"attributes":{"alt":"Bus Client","src":"/assets/busclient.f824930a3ffb63676ea2572e5bbb2f7d20f1e9694a674d3aa99733f489c9984e.8e815dff.png"},"children":[],"type":"image","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":6},"end":{"line":7}},"redocly:::linkOriginal:src":"images/BusClient.png"}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":6},"end":{"line":7}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":6},"end":{"line":7}}},{"$$mdtype":"Node","errors":[],"lines":[8,9],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[8,9],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[8,9],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[8,9],"inline":true,"attributes":{"content":"Configuration Parameters:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":8},"end":{"line":9}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":8},"end":{"line":9}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":8},"end":{"line":9}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":8},"end":{"line":9}}},{"$$mdtype":"Node","errors":[],"lines":[10,15],"inline":false,"attributes":{"ordered":false,"marker":"*"},"children":[{"$$mdtype":"Node","errors":[],"lines":[10,11],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[10,11],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[10,11],"inline":true,"attributes":{"content":"Name (string)"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":10},"end":{"line":11}}},{"$$mdtype":"Node","errors":[],"lines":[10,11],"inline":true,"attributes":{"content":" - Used to set the NATS Client Name that identifies the client to the NATS server. Although \"optional\", it is recommended to specify the \"Name\" setting in the "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":10},"end":{"line":11}}},{"$$mdtype":"Node","errors":[],"lines":[10,11],"inline":true,"attributes":{"content":"AEA.json"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":10},"end":{"line":11}}},{"$$mdtype":"Node","errors":[],"lines":[10,11],"inline":true,"attributes":{"content":" configuration file. configuration file."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":10},"end":{"line":11}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":10},"end":{"line":11}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":10},"end":{"line":11}}},{"$$mdtype":"Node","errors":[],"lines":[11,12],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[11,12],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[11,12],"inline":true,"attributes":{"content":"AEA2:BusClient:Server (string)"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":11},"end":{"line":12}}},{"$$mdtype":"Node","errors":[],"lines":[11,12],"inline":true,"attributes":{"content":": Server URL hosting the NATS Server. Default: "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":11},"end":{"line":12}}},{"$$mdtype":"Node","errors":[],"lines":[11,12],"inline":true,"attributes":{"content":"nats://localhost:4222"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":11},"end":{"line":12}}},{"$$mdtype":"Node","errors":[],"lines":[11,12],"inline":true,"attributes":{"content":"."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":11},"end":{"line":12}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":11},"end":{"line":12}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":11},"end":{"line":12}}},{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":true,"attributes":{"content":"AEA2:BusClient:Subscriptions (string array)"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":12},"end":{"line":13}}},{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":true,"attributes":{"content":": Array of string topics to subscribe to grouped by their type. Default: "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":12},"end":{"line":13}}},{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":true,"attributes":{"content":"<empty>"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":12},"end":{"line":13}}},{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":true,"attributes":{"content":".  Commonly, "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":12},"end":{"line":13}}},{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":true,"attributes":{"content":"'slbapps.<app-name>.DataIn'"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":12},"end":{"line":13}}},{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":true,"attributes":{"content":", and "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":12},"end":{"line":13}}},{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":true,"attributes":{"content":"'slbapps.<app-name>.RequestIn'"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":12},"end":{"line":13}}},{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":true,"attributes":{"content":" are frequently used."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":12},"end":{"line":13}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":12},"end":{"line":13}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":12},"end":{"line":13}}},{"$$mdtype":"Node","errors":[],"lines":[13,15],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[13,14],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[13,14],"inline":true,"attributes":{"content":"AEA2:BusClient:Targets (string array)"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":13},"end":{"line":14}}},{"$$mdtype":"Node","errors":[],"lines":[13,14],"inline":true,"attributes":{"content":": Array of string topics to publish to.  Targets are required to send messages. Default: "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":13},"end":{"line":14}}},{"$$mdtype":"Node","errors":[],"lines":[13,14],"inline":true,"attributes":{"content":"<empty>"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":13},"end":{"line":14}}},{"$$mdtype":"Node","errors":[],"lines":[13,14],"inline":true,"attributes":{"content":".  Commonly, "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":13},"end":{"line":14}}},{"$$mdtype":"Node","errors":[],"lines":[13,14],"inline":true,"attributes":{"content":"'slbapps.<app-name>.DataIn'"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":13},"end":{"line":14}}},{"$$mdtype":"Node","errors":[],"lines":[13,14],"inline":true,"attributes":{"content":", and "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":13},"end":{"line":14}}},{"$$mdtype":"Node","errors":[],"lines":[13,14],"inline":true,"attributes":{"content":"'slbapps.<app-name>.RequestIn'"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":13},"end":{"line":14}}},{"$$mdtype":"Node","errors":[],"lines":[13,14],"inline":true,"attributes":{"content":" are frequently used."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":13},"end":{"line":14}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":13},"end":{"line":14}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":13},"end":{"line":15}}}],"type":"list","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":10},"end":{"line":15}}},{"$$mdtype":"Node","errors":[],"lines":[15,16,17,18],"inline":false,"attributes":{"type":"info"},"children":[{"$$mdtype":"Node","errors":[],"lines":[16,17],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[16,17],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[16,17],"inline":true,"attributes":{"content":"Prior to SDK 3.0, NATS topics which are now listed in the AEA.json configuration file under Subscriptions and Targets were managed by the AEA broker and enumerated in the routes.json configuration file. With SDK 3.0, the AEA Broker and routes.json are no longer used."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":16},"end":{"line":17}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":16},"end":{"line":17}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":16},"end":{"line":17}}}],"type":"tag","tag":"admonition","annotations":[{"type":"attribute","name":"type","value":"info"}],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":15},"end":{"line":16}}},{"$$mdtype":"Node","errors":[],"lines":[19,20],"inline":false,"attributes":{"level":4},"children":[{"$$mdtype":"Node","errors":[],"lines":[19,20],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[19,20],"inline":true,"attributes":{"content":"Example of "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":19},"end":{"line":20}}},{"$$mdtype":"Node","errors":[],"lines":[19,20],"inline":true,"attributes":{"content":"AEA.json"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":19},"end":{"line":20}}},{"$$mdtype":"Node","errors":[],"lines":[19,20],"inline":true,"attributes":{"content":" configuration file:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":19},"end":{"line":20}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":19},"end":{"line":20}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":19},"end":{"line":20}}},{"$$mdtype":"Node","errors":[],"lines":[21,73],"inline":false,"attributes":{"content":"{\n    \"Name\": \"MyApp\",\n    \"AEA2\": {\n        \"RedisClient\": {\n            \"Server\": \"localhost\",\n            \"Port\": \"6379\"\n        },\n        \"BusClient\": {\n            \"Server\": \"nats://localhost:4222\",\n            \"Subscriptions\": [\n                {\n                    \"DataIn\": [\n                        \"slbapps.MyApp.DataIn\",\n                        \"slbapps.events.DataIn\"\n                    ]\n                },\n                {\n                    \"RequestIn\": [\n                        \"slbapps.MyApp.RequestIn\"\n                    ]\n                },\n                {\n                    \"EventIn\": [\n                        \"slbapps.MyApp.EventIn\"\n                    ]\n                }\n            ],\n            \"Targets\": [\n                {\n                    \"DataOut\": [\n                        \"slbapps.app1.DataIn\",\n                        \"slbapps.app2.DataIn\",\n                    ]\n                },\n                {\n                    \"RequestOut\": [\n                        \"slbapps.app1.RequestIn\",\n                        \"slbapps.app2.RequestIn\",\n                    ]\n                },\n                {\n                    \"EventOut\": [\n                        \"slbapps.app1.EventIn\",\n                        \"slbapps.app2.EventIn\",\n                    ]\n                }\n            ]\n        }\n    }\n}\n","language":"json"},"children":[{"$$mdtype":"Node","errors":[],"lines":[21,73],"inline":false,"attributes":{"content":"{\n    \"Name\": \"MyApp\",\n    \"AEA2\": {\n        \"RedisClient\": {\n            \"Server\": \"localhost\",\n            \"Port\": \"6379\"\n        },\n        \"BusClient\": {\n            \"Server\": \"nats://localhost:4222\",\n            \"Subscriptions\": [\n                {\n                    \"DataIn\": [\n                        \"slbapps.MyApp.DataIn\",\n                        \"slbapps.events.DataIn\"\n                    ]\n                },\n                {\n                    \"RequestIn\": [\n                        \"slbapps.MyApp.RequestIn\"\n                    ]\n                },\n                {\n                    \"EventIn\": [\n                        \"slbapps.MyApp.EventIn\"\n                    ]\n                }\n            ],\n            \"Targets\": [\n                {\n                    \"DataOut\": [\n                        \"slbapps.app1.DataIn\",\n                        \"slbapps.app2.DataIn\",\n                    ]\n                },\n                {\n                    \"RequestOut\": [\n                        \"slbapps.app1.RequestIn\",\n                        \"slbapps.app2.RequestIn\",\n                    ]\n                },\n                {\n                    \"EventOut\": [\n                        \"slbapps.app1.EventIn\",\n                        \"slbapps.app2.EventIn\",\n                    ]\n                }\n            ]\n        }\n    }\n}\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":21},"end":{"line":73}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":21},"end":{"line":73}}},{"$$mdtype":"Node","errors":[],"lines":[74,75],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[74,75],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[74,75],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[74,75],"inline":true,"attributes":{"content":"Properties:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":74},"end":{"line":75}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":74},"end":{"line":75}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":74},"end":{"line":75}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":74},"end":{"line":75}}},{"$$mdtype":"Node","errors":[],"lines":[76,80],"inline":false,"attributes":{"ordered":false,"marker":"*"},"children":[{"$$mdtype":"Node","errors":[],"lines":[76,77],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[76,77],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[76,77],"inline":true,"attributes":{"content":"Instance: BusClient"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":76},"end":{"line":77}}},{"$$mdtype":"Node","errors":[],"lines":[76,77],"inline":true,"attributes":{"content":" - Used to access the Singleton instance and is the same as using the Agora.SDK.BusClient."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":76},"end":{"line":77}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":76},"end":{"line":77}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":76},"end":{"line":77}}},{"$$mdtype":"Node","errors":[],"lines":[77,78],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[77,78],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[77,78],"inline":true,"attributes":{"content":"IsConnected: bool"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":77},"end":{"line":78}}},{"$$mdtype":"Node","errors":[],"lines":[77,78],"inline":true,"attributes":{"content":" -  "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":77},"end":{"line":78}}},{"$$mdtype":"Node","errors":[],"lines":[77,78],"inline":true,"attributes":{"content":"True"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":77},"end":{"line":78}}},{"$$mdtype":"Node","errors":[],"lines":[77,78],"inline":true,"attributes":{"content":" if connected."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":77},"end":{"line":78}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":77},"end":{"line":78}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":77},"end":{"line":78}}},{"$$mdtype":"Node","errors":[],"lines":[78,80],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[78,79],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[78,79],"inline":true,"attributes":{"content":"Messages: BusMessageQueues"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":78},"end":{"line":79}}},{"$$mdtype":"Node","errors":[],"lines":[78,79],"inline":true,"attributes":{"content":" -  Provides access to the queues used to store incoming messages."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":78},"end":{"line":79}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":78},"end":{"line":79}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":78},"end":{"line":80}}}],"type":"list","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":76},"end":{"line":80}}},{"$$mdtype":"Node","errors":[],"lines":[80,81],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[80,81],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[80,81],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[80,81],"inline":true,"attributes":{"content":"Methods:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":80},"end":{"line":81}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":80},"end":{"line":81}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":80},"end":{"line":81}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":80},"end":{"line":81}}},{"$$mdtype":"Node","errors":[],"lines":[82,92],"inline":false,"attributes":{"content":"# [NET](#tab/net)\n\n* `void Connect(int timeout_msec)` - Connects to the Bus using configuration settings.\n* `bool IsConnected()` - Returns `true` if BusClient is connected.\n* `void SendData(IoDataReportMsg data, string msgTopic = \"DataOut\")` - Sends an IoDataReportMsg to the Bus.  Messages are sent to the topic, `msgTopic` which defaults to `'DataOut'` list in Targets.\n* `void SendRequest(RequestMsg request, string msgTopic = \"RequestOut\")` - Sends a RequestMsg to the Bus.  Messages are sent to the topic, `msgTopic` which defaults to `'RequestOut'` list in Targets.\n* `void SendMessage(string topic, MessageHeader header, string jsonMessage)` - Sends a json message as json `\"payload\"` element and `header` as json `\"header\"` element using the specified `topic`.  \n* `async Task<bool> SendRawMessage(string topic, string message)` - Sends a raw `message` as a string to the specified `topic`.\n* `void SendEvent(EventMsg eventmsg, string msgTopic = \"EventOut\")` - Sends a EventMsg to the Bus.  Messages are sent to the topic, `msgTopic` which defaults to `'EventOut'`  list in Targets."},"children":[],"type":"comment","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":82},"end":{"line":92}}},{"$$mdtype":"Node","errors":[],"lines":[93,94],"inline":false,"attributes":{"level":1},"children":[{"$$mdtype":"Node","errors":[],"lines":[93,94],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[93,94],"inline":true,"attributes":{"href":"#tab/python"},"children":[{"$$mdtype":"Node","errors":[],"lines":[93,94],"inline":true,"attributes":{"content":"Python"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":93},"end":{"line":94}}}],"type":"link","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":93},"end":{"line":94}},"redocly:::linkOriginal:href":"#tab/python"}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":93},"end":{"line":94}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":93},"end":{"line":94}}},{"$$mdtype":"Node","errors":[],"lines":[95,103],"inline":false,"attributes":{"ordered":false,"marker":"*"},"children":[{"$$mdtype":"Node","errors":[],"lines":[95,96],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[95,96],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[95,96],"inline":true,"attributes":{"content":"connect(int timeout_sec)"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":95},"end":{"line":96}}},{"$$mdtype":"Node","errors":[],"lines":[95,96],"inline":true,"attributes":{"content":" - Connects to the Bus using configuration settings."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":95},"end":{"line":96}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":95},"end":{"line":96}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":95},"end":{"line":96}}},{"$$mdtype":"Node","errors":[],"lines":[96,97],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[96,97],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[96,97],"inline":true,"attributes":{"content":"is_connected()"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":96},"end":{"line":97}}},{"$$mdtype":"Node","errors":[],"lines":[96,97],"inline":true,"attributes":{"content":" - Returns "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":96},"end":{"line":97}}},{"$$mdtype":"Node","errors":[],"lines":[96,97],"inline":true,"attributes":{"content":"true"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":96},"end":{"line":97}}},{"$$mdtype":"Node","errors":[],"lines":[96,97],"inline":true,"attributes":{"content":" if BusClient is connected."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":96},"end":{"line":97}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":96},"end":{"line":97}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":96},"end":{"line":97}}},{"$$mdtype":"Node","errors":[],"lines":[97,98],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[97,98],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[97,98],"inline":true,"attributes":{"content":"send_data(data: IoDataReportMsg, msgTopic = \"DataOut\": str)"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":97},"end":{"line":98}}},{"$$mdtype":"Node","errors":[],"lines":[97,98],"inline":true,"attributes":{"content":" - Sends an IoDataReportMsg to the Bus.  Messages are sent to the topic, "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":97},"end":{"line":98}}},{"$$mdtype":"Node","errors":[],"lines":[97,98],"inline":true,"attributes":{"content":"msgTopic"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":97},"end":{"line":98}}},{"$$mdtype":"Node","errors":[],"lines":[97,98],"inline":true,"attributes":{"content":" which defaults to "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":97},"end":{"line":98}}},{"$$mdtype":"Node","errors":[],"lines":[97,98],"inline":true,"attributes":{"content":"'DataOut'"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":97},"end":{"line":98}}},{"$$mdtype":"Node","errors":[],"lines":[97,98],"inline":true,"attributes":{"content":" list in Targets.."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":97},"end":{"line":98}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":97},"end":{"line":98}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":97},"end":{"line":98}}},{"$$mdtype":"Node","errors":[],"lines":[98,99],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[98,99],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[98,99],"inline":true,"attributes":{"content":"send_request(request: RequestMsg, msgTopic = \"RequestOut\": str)"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":98},"end":{"line":99}}},{"$$mdtype":"Node","errors":[],"lines":[98,99],"inline":true,"attributes":{"content":" - Sends a RequestMsg to the Bus.  Messages are sent to the topic, "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":98},"end":{"line":99}}},{"$$mdtype":"Node","errors":[],"lines":[98,99],"inline":true,"attributes":{"content":"msgTopic"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":98},"end":{"line":99}}},{"$$mdtype":"Node","errors":[],"lines":[98,99],"inline":true,"attributes":{"content":" which defaults to "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":98},"end":{"line":99}}},{"$$mdtype":"Node","errors":[],"lines":[98,99],"inline":true,"attributes":{"content":"'RequestOut'"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":98},"end":{"line":99}}},{"$$mdtype":"Node","errors":[],"lines":[98,99],"inline":true,"attributes":{"content":" list in Targets."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":98},"end":{"line":99}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":98},"end":{"line":99}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":98},"end":{"line":99}}},{"$$mdtype":"Node","errors":[],"lines":[99,100],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[99,100],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[99,100],"inline":true,"attributes":{"content":"void send_message(topic: str, header: MessageHeader, jsonMessage: str)"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":99},"end":{"line":100}}},{"$$mdtype":"Node","errors":[],"lines":[99,100],"inline":true,"attributes":{"content":" - Sends a json message as json "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":99},"end":{"line":100}}},{"$$mdtype":"Node","errors":[],"lines":[99,100],"inline":true,"attributes":{"content":"\"payload\""},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":99},"end":{"line":100}}},{"$$mdtype":"Node","errors":[],"lines":[99,100],"inline":true,"attributes":{"content":" element and "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":99},"end":{"line":100}}},{"$$mdtype":"Node","errors":[],"lines":[99,100],"inline":true,"attributes":{"content":"header"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":99},"end":{"line":100}}},{"$$mdtype":"Node","errors":[],"lines":[99,100],"inline":true,"attributes":{"content":" as json "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":99},"end":{"line":100}}},{"$$mdtype":"Node","errors":[],"lines":[99,100],"inline":true,"attributes":{"content":"\"header\""},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":99},"end":{"line":100}}},{"$$mdtype":"Node","errors":[],"lines":[99,100],"inline":true,"attributes":{"content":" element using the specified "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":99},"end":{"line":100}}},{"$$mdtype":"Node","errors":[],"lines":[99,100],"inline":true,"attributes":{"content":"topic"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":99},"end":{"line":100}}},{"$$mdtype":"Node","errors":[],"lines":[99,100],"inline":true,"attributes":{"content":"."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":99},"end":{"line":100}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":99},"end":{"line":100}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":99},"end":{"line":100}}},{"$$mdtype":"Node","errors":[],"lines":[100,101],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[100,101],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[100,101],"inline":true,"attributes":{"content":"void send_raw_message(topic: str, message: str)"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":100},"end":{"line":101}}},{"$$mdtype":"Node","errors":[],"lines":[100,101],"inline":true,"attributes":{"content":" - Sends a raw "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":100},"end":{"line":101}}},{"$$mdtype":"Node","errors":[],"lines":[100,101],"inline":true,"attributes":{"content":"message"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":100},"end":{"line":101}}},{"$$mdtype":"Node","errors":[],"lines":[100,101],"inline":true,"attributes":{"content":" as a string to the specified "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":100},"end":{"line":101}}},{"$$mdtype":"Node","errors":[],"lines":[100,101],"inline":true,"attributes":{"content":"topic"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":100},"end":{"line":101}}},{"$$mdtype":"Node","errors":[],"lines":[100,101],"inline":true,"attributes":{"content":"."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":100},"end":{"line":101}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":100},"end":{"line":101}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":100},"end":{"line":101}}},{"$$mdtype":"Node","errors":[],"lines":[101,103],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[101,102],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[101,102],"inline":true,"attributes":{"content":"send_event(event: EventMsg, msgTopic = \"EventOut\": str)"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":101},"end":{"line":102}}},{"$$mdtype":"Node","errors":[],"lines":[101,102],"inline":true,"attributes":{"content":" - Sends a EventMsg to the Bus.  Messages are sent to the topic, "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":101},"end":{"line":102}}},{"$$mdtype":"Node","errors":[],"lines":[101,102],"inline":true,"attributes":{"content":"msgTopic"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":101},"end":{"line":102}}},{"$$mdtype":"Node","errors":[],"lines":[101,102],"inline":true,"attributes":{"content":" which defaults to "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":101},"end":{"line":102}}},{"$$mdtype":"Node","errors":[],"lines":[101,102],"inline":true,"attributes":{"content":"'EventOut'"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":101},"end":{"line":102}}},{"$$mdtype":"Node","errors":[],"lines":[101,102],"inline":true,"attributes":{"content":" list in Targets."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":101},"end":{"line":102}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":101},"end":{"line":102}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":101},"end":{"line":103}}}],"type":"list","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":95},"end":{"line":103}}},{"$$mdtype":"Node","errors":[],"lines":[103,104],"inline":false,"attributes":{},"children":[],"type":"hr","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/busclienttutorial.md","start":{"line":103},"end":{"line":104}}}],"type":"document","annotations":[],"slots":{}},"solutions/agora/_partials/tutorial/configurationtutorial.md":{"$$mdtype":"Node","errors":[],"lines":[],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[0,5],"inline":false,"attributes":{"content":"------------------------------------------------------------------------------\n                                    C O N F I G U R A T I O N  T U T O R I A L\n------------------------------------------------------------------------------"},"children":[],"type":"comment","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":0},"end":{"line":5}}},{"$$mdtype":"Node","errors":[],"lines":[6,7],"inline":false,"attributes":{"level":2},"children":[{"$$mdtype":"Node","errors":[],"lines":[6,7],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[6,7],"inline":true,"attributes":{"content":"Configuration Tutorial"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":6},"end":{"line":7}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":6},"end":{"line":7}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":6},"end":{"line":7}}},{"$$mdtype":"Node","errors":[],"lines":[8,9],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[8,9],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[8,9],"inline":true,"attributes":{"content":"By the end of the configuration tutorial you should feel comfortable using the SDK Configuration capabilities and have an understanding of the dynamic nature of configuration which is an integral part for making your application configurable and modifiable - even while the application is running."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":8},"end":{"line":9}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":8},"end":{"line":9}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":8},"end":{"line":9}}},{"$$mdtype":"Node","errors":[],"lines":[10,11],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[10,11],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[10,11],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[10,11],"inline":true,"attributes":{"content":"Before you begin"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":10},"end":{"line":11}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":10},"end":{"line":11}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":10},"end":{"line":11}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":10},"end":{"line":11}}},{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":true,"attributes":{"content":"You should have completed the "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":12},"end":{"line":13}}},{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":true,"attributes":{"href":"/solutions/agora/quickstartguide"},"children":[{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":true,"attributes":{"content":"Getting Started"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":12},"end":{"line":13}}}],"type":"link","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":12},"end":{"line":13}},"redocly:::linkOriginal:href":"../../quickstartguide.md"},{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":true,"attributes":{"content":" tutorial to integrate the IIoT Edge SDK into your project before starting and have a project ready to use with the tutorial."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":12},"end":{"line":13}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":12},"end":{"line":13}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":12},"end":{"line":13}}},{"$$mdtype":"Node","errors":[],"lines":[14,15],"inline":false,"attributes":{"level":3},"children":[{"$$mdtype":"Node","errors":[],"lines":[14,15],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[14,15],"inline":true,"attributes":{"content":"Adding 'AEA.json' and Naming your App"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":14},"end":{"line":15}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":14},"end":{"line":15}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":14},"end":{"line":15}}},{"$$mdtype":"Node","errors":[],"lines":[16,17],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[16,17],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[16,17],"inline":true,"attributes":{"content":"The default name for your application is the Entry Assembly Name.  This Name can be overridden using IIoT Edge App Configuration, which is very useful when configuring the application to interact with other applications."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":16},"end":{"line":17}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":16},"end":{"line":17}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":16},"end":{"line":17}}},{"$$mdtype":"Node","errors":[],"lines":[18,19,20,21],"inline":false,"attributes":{"type":"info"},"children":[{"$$mdtype":"Node","errors":[],"lines":[19,20],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[19,20],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[19,20],"inline":true,"attributes":{"content":"The Application Name ("},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":19},"end":{"line":20}}},{"$$mdtype":"Node","errors":[],"lines":[19,20],"inline":true,"attributes":{"content":"Config[\"Name\"]"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":19},"end":{"line":20}}},{"$$mdtype":"Node","errors":[],"lines":[19,20],"inline":true,"attributes":{"content":") is used as the NATS Client identifier when routing messages."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":19},"end":{"line":20}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":19},"end":{"line":20}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":19},"end":{"line":20}}}],"type":"tag","tag":"admonition","annotations":[{"type":"attribute","name":"type","value":"info"}],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":18},"end":{"line":19}}},{"$$mdtype":"Node","errors":[],"lines":[23,24],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[23,24],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[23,24],"inline":true,"attributes":{"content":"To begin, copy the following code into a "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":23},"end":{"line":24}}},{"$$mdtype":"Node","errors":[],"lines":[23,24],"inline":true,"attributes":{"content":"program.py"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":23},"end":{"line":24}}},{"$$mdtype":"Node","errors":[],"lines":[23,24],"inline":true,"attributes":{"content":" file."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":23},"end":{"line":24}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":23},"end":{"line":24}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":23},"end":{"line":24}}},{"$$mdtype":"Node","errors":[],"lines":[25,39],"inline":false,"attributes":{"content":"# [NET](#tab/net)\n```csharp\nusing static Agora.SDK;\n\npublic class Program\n{\n    public static void Main(string[] args)\n    {\n        \"Starting\".LogHeading();\n        $\"Hello from {Config[\"Name\"]}!\".LogInfo();\n        \"Stopping\".LogHeading();\n    }\n}\n```"},"children":[],"type":"comment","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":25},"end":{"line":39}}},{"$$mdtype":"Node","errors":[],"lines":[40,41],"inline":false,"attributes":{"level":1},"children":[{"$$mdtype":"Node","errors":[],"lines":[40,41],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[40,41],"inline":true,"attributes":{"href":"#tab/python"},"children":[{"$$mdtype":"Node","errors":[],"lines":[40,41],"inline":true,"attributes":{"content":"Python"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":40},"end":{"line":41}}}],"type":"link","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":40},"end":{"line":41}},"redocly:::linkOriginal:href":"#tab/python"}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":40},"end":{"line":41}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":40},"end":{"line":41}}},{"$$mdtype":"Node","errors":[],"lines":[41,48],"inline":false,"attributes":{"content":"from agoraiot import config, logger\n\nlogger.heading(\"Starting\")\nlogger.info(f\"Hello from {config['Name']}!\")\nlogger.heading(\"Stopping\")\n","language":"python"},"children":[{"$$mdtype":"Node","errors":[],"lines":[41,48],"inline":false,"attributes":{"content":"from agoraiot import config, logger\n\nlogger.heading(\"Starting\")\nlogger.info(f\"Hello from {config['Name']}!\")\nlogger.heading(\"Stopping\")\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":41},"end":{"line":48}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":41},"end":{"line":48}}},{"$$mdtype":"Node","errors":[],"lines":[48,49],"inline":false,"attributes":{},"children":[],"type":"hr","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":48},"end":{"line":49}}},{"$$mdtype":"Node","errors":[],"lines":[50,51],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[50,51],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[50,51],"inline":true,"attributes":{"content":"Running the application will produce an output similar to:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":50},"end":{"line":51}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":50},"end":{"line":51}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":50},"end":{"line":51}}},{"$$mdtype":"Node","errors":[],"lines":[52,61],"inline":false,"attributes":{"content":"-------------------------------------------------------------------------------\n(33)                                                                   Starting\n-------------------------------------------------------------------------------\nI(36) - Hello from Module!\n-------------------------------------------------------------------------------\n(37)                                                                   Stopping\n-------------------------------------------------------------------------------\n","language":"output"},"children":[{"$$mdtype":"Node","errors":[],"lines":[52,61],"inline":false,"attributes":{"content":"-------------------------------------------------------------------------------\n(33)                                                                   Starting\n-------------------------------------------------------------------------------\nI(36) - Hello from Module!\n-------------------------------------------------------------------------------\n(37)                                                                   Stopping\n-------------------------------------------------------------------------------\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":52},"end":{"line":61}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":52},"end":{"line":61}}},{"$$mdtype":"Node","errors":[],"lines":[62,63],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[62,63],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[62,63],"inline":true,"attributes":{"content":"To override the name of the application, add a json file to the project called "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":62},"end":{"line":63}}},{"$$mdtype":"Node","errors":[],"lines":[62,63],"inline":true,"attributes":{"content":"AEA.json"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":62},"end":{"line":63}}},{"$$mdtype":"Node","errors":[],"lines":[62,63],"inline":true,"attributes":{"content":"."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":62},"end":{"line":63}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":62},"end":{"line":63}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":62},"end":{"line":63}}},{"$$mdtype":"Node","errors":[],"lines":[64,65],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[64,65],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[64,65],"inline":true,"attributes":{"content":"To set the Name, open the "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":64},"end":{"line":65}}},{"$$mdtype":"Node","errors":[],"lines":[64,65],"inline":true,"attributes":{"content":"AEA.json"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":64},"end":{"line":65}}},{"$$mdtype":"Node","errors":[],"lines":[64,65],"inline":true,"attributes":{"content":" file and add the following:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":64},"end":{"line":65}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":64},"end":{"line":65}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":64},"end":{"line":65}}},{"$$mdtype":"Node","errors":[],"lines":[66,67],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[66,67],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[66,67],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[66,67],"inline":true,"attributes":{"content":"AEA.json"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":66},"end":{"line":67}}},{"$$mdtype":"Node","errors":[],"lines":[66,67],"inline":true,"attributes":{"content":" configuration file:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":66},"end":{"line":67}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":66},"end":{"line":67}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":66},"end":{"line":67}}}],"type":"blockquote","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":66},"end":{"line":67}}},{"$$mdtype":"Node","errors":[],"lines":[68,73],"inline":false,"attributes":{"content":"{\n    \"Name\": \"MyApp\"\n}\n","language":"json"},"children":[{"$$mdtype":"Node","errors":[],"lines":[68,73],"inline":false,"attributes":{"content":"{\n    \"Name\": \"MyApp\"\n}\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":68},"end":{"line":73}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":68},"end":{"line":73}}},{"$$mdtype":"Node","errors":[],"lines":[74,75],"inline":false,"attributes":{"level":3},"children":[{"$$mdtype":"Node","errors":[],"lines":[74,75],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[74,75],"inline":true,"attributes":{"content":"Multiple Configuration Settings"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":74},"end":{"line":75}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":74},"end":{"line":75}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":74},"end":{"line":75}}},{"$$mdtype":"Node","errors":[],"lines":[76,77],"inline":false,"attributes":{"level":4},"children":[{"$$mdtype":"Node","errors":[],"lines":[76,77],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[76,77],"inline":true,"attributes":{"content":"Part I: Nested Settings"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":76},"end":{"line":77}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":76},"end":{"line":77}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":76},"end":{"line":77}}},{"$$mdtype":"Node","errors":[],"lines":[78,79],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[78,79],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[78,79],"inline":true,"attributes":{"content":"An "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":78},"end":{"line":79}}},{"$$mdtype":"Node","errors":[],"lines":[78,79],"inline":true,"attributes":{"content":"AEA.json"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":78},"end":{"line":79}}},{"$$mdtype":"Node","errors":[],"lines":[78,79],"inline":true,"attributes":{"content":" file can contain nested settings."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":78},"end":{"line":79}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":78},"end":{"line":79}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":78},"end":{"line":79}}},{"$$mdtype":"Node","errors":[],"lines":[80,81],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[80,81],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[80,81],"inline":true,"attributes":{"content":"Copy the contents below into your "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":80},"end":{"line":81}}},{"$$mdtype":"Node","errors":[],"lines":[80,81],"inline":true,"attributes":{"content":"AEA.json"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":80},"end":{"line":81}}},{"$$mdtype":"Node","errors":[],"lines":[80,81],"inline":true,"attributes":{"content":" file of your application."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":80},"end":{"line":81}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":80},"end":{"line":81}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":80},"end":{"line":81}}},{"$$mdtype":"Node","errors":[],"lines":[82,91],"inline":false,"attributes":{"content":"{\n    \"Name\": \"MyApp\",\n    \"MyApp\": {\n        \"Setting1\": \"Value\",\n        \"Setting2\": [\"An\", \"Array\", \"of\", \"Values\"]\n    }\n}\n","language":"json"},"children":[{"$$mdtype":"Node","errors":[],"lines":[82,91],"inline":false,"attributes":{"content":"{\n    \"Name\": \"MyApp\",\n    \"MyApp\": {\n        \"Setting1\": \"Value\",\n        \"Setting2\": [\"An\", \"Array\", \"of\", \"Values\"]\n    }\n}\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":82},"end":{"line":91}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":82},"end":{"line":91}}},{"$$mdtype":"Node","errors":[],"lines":[92,93],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[92,93],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[92,93],"inline":true,"attributes":{"content":"The following codes shows how to access the settings."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":92},"end":{"line":93}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":92},"end":{"line":93}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":92},"end":{"line":93}}},{"$$mdtype":"Node","errors":[],"lines":[94,120],"inline":false,"attributes":{"content":"# [NET](#tab/net)\n\nProgram.cs:\n\n```csharp\nusing System.Text;\nusing static Agora.SDK;\n\npublic class Program\n{\n    public static void Main(string[] args)\n    {\n        Console.WriteLine($\"The name of my app is `{Config[\"Name\"]}'\");\n        Console.WriteLine($\"Setting1 = `{Config[\"MyApp:Setting1\"]}'\");\n\n        /* Accessing a setting with an array */\n        var settings = Config.GetSection(\"MyApp:Setting2\").GetChildren().AsEnumerable();\n\n        Console.Write(\"Setting2 contains `\");\n        foreach (var s in settings)\n            Console.Write(s.Value + ' ');\n\n        Console.WriteLine(\"'.\");\n    }\n}\n```"},"children":[],"type":"comment","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":94},"end":{"line":120}}},{"$$mdtype":"Node","errors":[],"lines":[121,122],"inline":false,"attributes":{"level":1},"children":[{"$$mdtype":"Node","errors":[],"lines":[121,122],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[121,122],"inline":true,"attributes":{"href":"#tab/python"},"children":[{"$$mdtype":"Node","errors":[],"lines":[121,122],"inline":true,"attributes":{"content":"Python"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":121},"end":{"line":122}}}],"type":"link","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":121},"end":{"line":122}},"redocly:::linkOriginal:href":"#tab/python"}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":121},"end":{"line":122}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":121},"end":{"line":122}}},{"$$mdtype":"Node","errors":[],"lines":[123,124],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[123,124],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[123,124],"inline":true,"attributes":{"content":"app.py:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":123},"end":{"line":124}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":123},"end":{"line":124}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":123},"end":{"line":124}}},{"$$mdtype":"Node","errors":[],"lines":[125,139],"inline":false,"attributes":{"content":"from agoraiot import logger, config\n\nprint(f\"The name of my app is '{config['Name']}'\")\nprint(f\"Setting 1 = '{config['MyApp:Setting1']}'\")\n\nsettings = config['MyApp:Setting2']\n\nprint(\"Setting 2 contains '\", end=\"\")\nfor setting in settings:\n    print(setting + ' ', end=\"\")\n\nprint(\"'.\")\n","language":"python"},"children":[{"$$mdtype":"Node","errors":[],"lines":[125,139],"inline":false,"attributes":{"content":"from agoraiot import logger, config\n\nprint(f\"The name of my app is '{config['Name']}'\")\nprint(f\"Setting 1 = '{config['MyApp:Setting1']}'\")\n\nsettings = config['MyApp:Setting2']\n\nprint(\"Setting 2 contains '\", end=\"\")\nfor setting in settings:\n    print(setting + ' ', end=\"\")\n\nprint(\"'.\")\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":125},"end":{"line":139}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":125},"end":{"line":139}}},{"$$mdtype":"Node","errors":[],"lines":[139,140],"inline":false,"attributes":{},"children":[],"type":"hr","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":139},"end":{"line":140}}},{"$$mdtype":"Node","errors":[],"lines":[141,142],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[141,142],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[141,142],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[141,142],"inline":true,"attributes":{"content":"Output:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":141},"end":{"line":142}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":141},"end":{"line":142}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":141},"end":{"line":142}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":141},"end":{"line":142}}},{"$$mdtype":"Node","errors":[],"lines":[143,148],"inline":false,"attributes":{"content":"The name of my app is `MyApp'\nSetting1 = `Value'\nSetting2 contains `An Array of Values '.\n","language":"output"},"children":[{"$$mdtype":"Node","errors":[],"lines":[143,148],"inline":false,"attributes":{"content":"The name of my app is `MyApp'\nSetting1 = `Value'\nSetting2 contains `An Array of Values '.\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":143},"end":{"line":148}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":143},"end":{"line":148}}},{"$$mdtype":"Node","errors":[],"lines":[149,150],"inline":false,"attributes":{"level":4},"children":[{"$$mdtype":"Node","errors":[],"lines":[149,150],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[149,150],"inline":true,"attributes":{"content":"Part II: Using Redis for Configuration"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":149},"end":{"line":150}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":149},"end":{"line":150}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":149},"end":{"line":150}}},{"$$mdtype":"Node","errors":[],"lines":[151,152],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[151,152],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[151,152],"inline":true,"attributes":{"content":"The purpose of the alternate configuration via Redis is to allow configuration of the application once it is deployed as a container.  Typically, the container would be installed on a Gateway, and AgoraOps would configure the application as needed for the problem being addressed by the application."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":151},"end":{"line":152}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":151},"end":{"line":152}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":151},"end":{"line":152}}},{"$$mdtype":"Node","errors":[],"lines":[153,154],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[153,154],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[153,154],"inline":true,"attributes":{"content":"The SDK subscribes to a Redis key for alternate configuration. Updates to this key are read by the SDK at runtime and configuration is updated."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":153},"end":{"line":154}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":153},"end":{"line":154}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":153},"end":{"line":154}}},{"$$mdtype":"Node","errors":[],"lines":[155,158],"inline":false,"attributes":{"content":"twin_properties/config/desired/<app-name>\n","language":"key"},"children":[{"$$mdtype":"Node","errors":[],"lines":[155,158],"inline":false,"attributes":{"content":"twin_properties/config/desired/<app-name>\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":155},"end":{"line":158}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":155},"end":{"line":158}}},{"$$mdtype":"Node","errors":[],"lines":[159,160],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[159,160],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[159,160],"inline":true,"attributes":{"content":"When running as a container, the SDK loads the configuration components in the following order:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":159},"end":{"line":160}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":159},"end":{"line":160}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":159},"end":{"line":160}}},{"$$mdtype":"Node","errors":[],"lines":[161,166],"inline":false,"attributes":{"ordered":true,"marker":"."},"children":[{"$$mdtype":"Node","errors":[],"lines":[161,162],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[161,162],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[161,162],"inline":true,"attributes":{"content":"Default Settings: Set within the application."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":161},"end":{"line":162}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":161},"end":{"line":162}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":161},"end":{"line":162}}},{"$$mdtype":"Node","errors":[],"lines":[162,163],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[162,163],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[162,163],"inline":true,"attributes":{"content":"The Primary Config: "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":162},"end":{"line":163}}},{"$$mdtype":"Node","errors":[],"lines":[162,163],"inline":true,"attributes":{"content":"AEA.json"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":162},"end":{"line":163}}},{"$$mdtype":"Node","errors":[],"lines":[162,163],"inline":true,"attributes":{"content":" of the application"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":162},"end":{"line":163}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":162},"end":{"line":163}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":162},"end":{"line":163}}},{"$$mdtype":"Node","errors":[],"lines":[163,164],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[163,164],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[163,164],"inline":true,"attributes":{"content":"Config stored in Redis key"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":163},"end":{"line":164}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":163},"end":{"line":164}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":163},"end":{"line":164}}},{"$$mdtype":"Node","errors":[],"lines":[164,166],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[164,165],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[164,165],"inline":true,"attributes":{"content":"Override Settings: Set within the application."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":164},"end":{"line":165}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":164},"end":{"line":165}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":164},"end":{"line":166}}}],"type":"list","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":161},"end":{"line":166}}},{"$$mdtype":"Node","errors":[],"lines":[166,167],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[166,167],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[166,167],"inline":true,"attributes":{"content":"To see how these work together, perform the following steps:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":166},"end":{"line":167}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":166},"end":{"line":167}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":166},"end":{"line":167}}},{"$$mdtype":"Node","errors":[],"lines":[168,188],"inline":false,"attributes":{"content":"# [NET](#tab/net)\n\n1. Using the same `Program.cs` from the pervious tutorial go to the executing assembly folder.  Generally this will be in the `bin/Debug/net6.0` folder of the project.\n1. Add a new directory called `config`.\n1. Add a new alternate configuration file called `config/AEA.json` with the following contents and run the application.\n\n```json\n{\n    \"MyApp\": {\n        \"Setting1\": \"New Value for Setting 1\"\n    }\n}\n```\n**File structure:**\n```txt\nbin\\\n    Debug\\\n          net6.0\\\n                config\\AEA.json\n```"},"children":[],"type":"comment","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":168},"end":{"line":188}}},{"$$mdtype":"Node","errors":[],"lines":[189,190],"inline":false,"attributes":{"level":1},"children":[{"$$mdtype":"Node","errors":[],"lines":[189,190],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[189,190],"inline":true,"attributes":{"href":"#tab/python"},"children":[{"$$mdtype":"Node","errors":[],"lines":[189,190],"inline":true,"attributes":{"content":"Python"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":189},"end":{"line":190}}}],"type":"link","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":189},"end":{"line":190}},"redocly:::linkOriginal:href":"#tab/python"}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":189},"end":{"line":190}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":189},"end":{"line":190}}},{"$$mdtype":"Node","errors":[],"lines":[191,194],"inline":false,"attributes":{"ordered":true,"marker":"."},"children":[{"$$mdtype":"Node","errors":[],"lines":[191,192],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[191,192],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[191,192],"inline":true,"attributes":{"content":"Using the same python code from the pervious tutorial go to the folder."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":191},"end":{"line":192}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":191},"end":{"line":192}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":191},"end":{"line":192}}},{"$$mdtype":"Node","errors":[],"lines":[192,194],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[192,193],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[192,193],"inline":true,"attributes":{"content":"Update the Redis key above with a new "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":192},"end":{"line":193}}},{"$$mdtype":"Node","errors":[],"lines":[192,193],"inline":true,"attributes":{"content":"AEA.json"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":192},"end":{"line":193}}},{"$$mdtype":"Node","errors":[],"lines":[192,193],"inline":true,"attributes":{"content":" with the following contents and run the application."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":192},"end":{"line":193}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":192},"end":{"line":193}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":192},"end":{"line":194}}}],"type":"list","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":191},"end":{"line":194}}},{"$$mdtype":"Node","errors":[],"lines":[194,209],"inline":false,"attributes":{"content":"{\n    \"MyApp\": {\n        \"Setting1\": \"New Value for Setting 1\"\n    }\n}\n---\n\n**Output:**\n\n```output\nThe name of my app is `MyApp'\nSetting1 = `New Value for Setting 1'\nSetting2 contains `An Array of Values '.\n","language":"json"},"children":[{"$$mdtype":"Node","errors":[],"lines":[194,209],"inline":false,"attributes":{"content":"{\n    \"MyApp\": {\n        \"Setting1\": \"New Value for Setting 1\"\n    }\n}\n---\n\n**Output:**\n\n```output\nThe name of my app is `MyApp'\nSetting1 = `New Value for Setting 1'\nSetting2 contains `An Array of Values '.\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":194},"end":{"line":209}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":194},"end":{"line":209}}},{"$$mdtype":"Node","errors":[],"lines":[210,211,212,213],"inline":false,"attributes":{"type":"info"},"children":[{"$$mdtype":"Node","errors":[],"lines":[211,212],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[211,212],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[211,212],"inline":true,"attributes":{"content":"Settings (key names) are case insensitive."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":211},"end":{"line":212}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":211},"end":{"line":212}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":211},"end":{"line":212}}}],"type":"tag","tag":"admonition","annotations":[{"type":"attribute","name":"type","value":"info"}],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":210},"end":{"line":211}}},{"$$mdtype":"Node","errors":[],"lines":[214,215,216,217],"inline":false,"attributes":{"type":"info"},"children":[{"$$mdtype":"Node","errors":[],"lines":[215,216],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[215,216],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[215,216],"inline":true,"attributes":{"content":"For Python SDK, the use of a switch map is required."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":215},"end":{"line":216}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":215},"end":{"line":216}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":215},"end":{"line":216}}}],"type":"tag","tag":"admonition","annotations":[{"type":"attribute","name":"type","value":"info"}],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":214},"end":{"line":215}}},{"$$mdtype":"Node","errors":[],"lines":[220,221],"inline":false,"attributes":{"level":4},"children":[{"$$mdtype":"Node","errors":[],"lines":[220,221],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[220,221],"inline":true,"attributes":{"content":"Part III: Responding To Configuration Changes"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":220},"end":{"line":221}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":220},"end":{"line":221}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":220},"end":{"line":221}}},{"$$mdtype":"Node","errors":[],"lines":[222,223],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[222,223],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[222,223],"inline":true,"attributes":{"content":"While your application runs at the edge, it is likely that you will want to make it respond to configuration changes.  You can do so by:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":222},"end":{"line":223}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":222},"end":{"line":223}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":222},"end":{"line":223}}},{"$$mdtype":"Node","errors":[],"lines":[223,225],"inline":false,"attributes":{"ordered":true,"marker":"."},"children":[{"$$mdtype":"Node","errors":[],"lines":[223,225],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[223,224],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[223,224],"inline":true,"attributes":{"content":"Using an "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":223},"end":{"line":224}}},{"$$mdtype":"Node","errors":[],"lines":[223,224],"inline":true,"attributes":{"content":"Agora.ObservableSetting"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":223},"end":{"line":224}}},{"$$mdtype":"Node","errors":[],"lines":[223,224],"inline":true,"attributes":{"content":"."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":223},"end":{"line":224}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":223},"end":{"line":224}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":223},"end":{"line":225}}}],"type":"list","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":223},"end":{"line":225}}},{"$$mdtype":"Node","errors":[],"lines":[225,226],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[225,226],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[225,226],"inline":true,"attributes":{"content":"Both methods are illustrated as below:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":225},"end":{"line":226}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":225},"end":{"line":226}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":225},"end":{"line":226}}},{"$$mdtype":"Node","errors":[],"lines":[227,228],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[227,228],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[227,228],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[227,228],"inline":true,"attributes":{"content":"AEA.json:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":227},"end":{"line":228}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":227},"end":{"line":228}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":227},"end":{"line":228}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":227},"end":{"line":228}}},{"$$mdtype":"Node","errors":[],"lines":[229,236],"inline":false,"attributes":{"content":"{\n  \"Name\": \"ConfigurationTutorial\",\n  \"Author\": \"Original Author\",\n  \"Authors\": [ \"Author1\", \"Author2\" ]\n}\n","language":"json"},"children":[{"$$mdtype":"Node","errors":[],"lines":[229,236],"inline":false,"attributes":{"content":"{\n  \"Name\": \"ConfigurationTutorial\",\n  \"Author\": \"Original Author\",\n  \"Authors\": [ \"Author1\", \"Author2\" ]\n}\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":229},"end":{"line":236}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":229},"end":{"line":236}}},{"$$mdtype":"Node","errors":[],"lines":[237,285],"inline":false,"attributes":{"content":"# [NET](#tab/net)\n\n**Program.cs:**\n\n```csharp\nusing static Agora.SDK;\n\npublic class Program\n{\n    static public void Main()\n    {\n        \"Starting\".LogHeading();\n\n        WriteAuthor();\n\n        // Method 1\n        //Config.GetReloadToken().RegisterChangeCallback(InvokeChange, null);\n        //\"If you modify any setting you will get a ReloadTokenChange\".Cout();\n\n        // Method 2\n        //ObservableSetting.Get(\"Author\").PropertyChanged += AuthorObservableSettingChanged;\n        //$\"If you modify the 'Author' setting, you will get an ObservableSetting notifications.\".Cout();\n\n        Console.ReadLine();\n\n        \"Stopping\".LogHeading();\n    }\n\n    private static void WriteAuthor() => $\"Author is set to `{Config[\"Author\"]}`\".Cout();\n\n    private static void AuthorObservableSettingChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)\n    {\n        WriteAuthor();\n    }\n\n    private static void InvokeChange(object o)\n    {\n        \"Configuration Reloaded:\".Cout();\n        WriteAuthor();\n\n        // You must re-register the change callback as the Configuration.ReloadToken has changed\n        Config.GetReloadToken().RegisterChangeCallback(InvokeChange, null);\n    }\n}\n```\n\n> [!TIP]\n> When you use the method 1, you will notice each time you make a configuration change, you will get two callbacks.  This is a known issue in the Microsoft.Extensions.Configuration and has been attributed to the system having to handle multiple operating systems which may or may not have file change callbacks and need to use file polling instead."},"children":[],"type":"comment","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":237},"end":{"line":285}}},{"$$mdtype":"Node","errors":[],"lines":[286,287],"inline":false,"attributes":{"level":1},"children":[{"$$mdtype":"Node","errors":[],"lines":[286,287],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[286,287],"inline":true,"attributes":{"href":"#tab/python"},"children":[{"$$mdtype":"Node","errors":[],"lines":[286,287],"inline":true,"attributes":{"content":"Python"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":286},"end":{"line":287}}}],"type":"link","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":286},"end":{"line":287}},"redocly:::linkOriginal:href":"#tab/python"}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":286},"end":{"line":287}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":286},"end":{"line":287}}},{"$$mdtype":"Node","errors":[],"lines":[288,318],"inline":false,"attributes":{"content":"from agoraiot import *\n\ndef handle_config_change():\n    print( \"Configuration Reloaded\" )\n    write_author()\n\ndef author_setting_change(payload):\n    write_author()\n\ndef write_author():\n    print( f\"Author is set to `{config[\"Author\"]}`\")\n\n\nlogger.heading(\"Starting\")\n\nwrite_author()\n\n# Method 1\n# config.observer_config(handle_config_change)\n# print(\"If you modify any setting you will get a ReloadTokenChange\")\n\n# Method 2\n# config.observe(\"Author\", author_setting_change)\n# print(\"If you modify the 'Author' setting, you will get a notification)\n\ninput(\"Waiting\")\n\nlogger.heading(\"Stopping\")\n","language":"python"},"children":[{"$$mdtype":"Node","errors":[],"lines":[288,318],"inline":false,"attributes":{"content":"from agoraiot import *\n\ndef handle_config_change():\n    print( \"Configuration Reloaded\" )\n    write_author()\n\ndef author_setting_change(payload):\n    write_author()\n\ndef write_author():\n    print( f\"Author is set to `{config[\"Author\"]}`\")\n\n\nlogger.heading(\"Starting\")\n\nwrite_author()\n\n# Method 1\n# config.observer_config(handle_config_change)\n# print(\"If you modify any setting you will get a ReloadTokenChange\")\n\n# Method 2\n# config.observe(\"Author\", author_setting_change)\n# print(\"If you modify the 'Author' setting, you will get a notification)\n\ninput(\"Waiting\")\n\nlogger.heading(\"Stopping\")\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":288},"end":{"line":318}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":288},"end":{"line":318}}},{"$$mdtype":"Node","errors":[],"lines":[319,320],"inline":false,"attributes":{},"children":[],"type":"hr","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":319},"end":{"line":320}}},{"$$mdtype":"Node","errors":[],"lines":[321,322],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[321,322],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[321,322],"inline":true,"attributes":{"content":"Both methods of handling configuration change may be used, even at the same time.  If you uncomment the lines after each "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":321},"end":{"line":322}}},{"$$mdtype":"Node","errors":[],"lines":[321,322],"inline":true,"attributes":{"content":"// Method"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":321},"end":{"line":322}}},{"$$mdtype":"Node","errors":[],"lines":[321,322],"inline":true,"attributes":{"content":" you can see what happens when you modify settings using the "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":321},"end":{"line":322}}},{"$$mdtype":"Node","errors":[],"lines":[321,322],"inline":true,"attributes":{"content":"config/AEA.json"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":321},"end":{"line":322}}},{"$$mdtype":"Node","errors":[],"lines":[321,322],"inline":true,"attributes":{"content":" file and the key-per-files such as "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":321},"end":{"line":322}}},{"$$mdtype":"Node","errors":[],"lines":[321,322],"inline":true,"attributes":{"content":"config/keys/authors"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":321},"end":{"line":322}}},{"$$mdtype":"Node","errors":[],"lines":[321,322],"inline":true,"attributes":{"content":" or "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":321},"end":{"line":322}}},{"$$mdtype":"Node","errors":[],"lines":[321,322],"inline":true,"attributes":{"content":"config/keys/authors__0"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":321},"end":{"line":322}}},{"$$mdtype":"Node","errors":[],"lines":[321,322],"inline":true,"attributes":{"content":"."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":321},"end":{"line":322}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":321},"end":{"line":322}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":321},"end":{"line":322}}},{"$$mdtype":"Node","errors":[],"lines":[323,324],"inline":false,"attributes":{"level":3},"children":[{"$$mdtype":"Node","errors":[],"lines":[323,324],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[323,324],"inline":true,"attributes":{"content":"Printing the Full Configuration"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":323},"end":{"line":324}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":323},"end":{"line":324}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":323},"end":{"line":324}}},{"$$mdtype":"Node","errors":[],"lines":[325,326],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[325,326],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[325,326],"inline":true,"attributes":{"content":"Sometimes it is necessary to understand the full configuration to assist in troubleshooting issues.  Below shows how to use the SDK to write the configuration to logger as Info."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":325},"end":{"line":326}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":325},"end":{"line":326}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":325},"end":{"line":326}}},{"$$mdtype":"Node","errors":[],"lines":[327,328],"inline":false,"attributes":{"level":1},"children":[{"$$mdtype":"Node","errors":[],"lines":[327,328],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[327,328],"inline":true,"attributes":{"href":"#tab/python"},"children":[{"$$mdtype":"Node","errors":[],"lines":[327,328],"inline":true,"attributes":{"content":"Python"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":327},"end":{"line":328}}}],"type":"link","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":327},"end":{"line":328}},"redocly:::linkOriginal:href":"#tab/python"}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":327},"end":{"line":328}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":327},"end":{"line":328}}},{"$$mdtype":"Node","errors":[],"lines":[329,332],"inline":false,"attributes":{"content":"logger.info( json.dumps(config.get_dict(), indent=4) )\n","language":"python"},"children":[{"$$mdtype":"Node","errors":[],"lines":[329,332],"inline":false,"attributes":{"content":"logger.info( json.dumps(config.get_dict(), indent=4) )\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":329},"end":{"line":332}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":329},"end":{"line":332}}},{"$$mdtype":"Node","errors":[],"lines":[333,334],"inline":false,"attributes":{},"children":[],"type":"hr","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/configurationtutorial.md","start":{"line":333},"end":{"line":334}}}],"type":"document","annotations":[],"slots":{}},"solutions/agora/_partials/tutorial/gettingStarted.NET.md":{"$$mdtype":"Node","errors":[],"lines":[],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[0,1],"inline":false,"attributes":{"level":2},"children":[{"$$mdtype":"Node","errors":[],"lines":[0,1],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[0,1],"inline":true,"attributes":{"content":"Getting Started with the IIoT Edge App .NET SDK"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":0},"end":{"line":1}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":0},"end":{"line":1}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":0},"end":{"line":1}}},{"$$mdtype":"Node","errors":[],"lines":[2,3],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[2,3],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[2,3],"inline":true,"attributes":{"content":"The .NET SDK provides functionality for developing .NET edge applications using .NET6.0 and above."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":2},"end":{"line":3}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":2},"end":{"line":3}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":2},"end":{"line":3}}},{"$$mdtype":"Node","errors":[],"lines":[4,5],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[4,5],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[4,5],"inline":true,"attributes":{"content":"The .NET SDK is distributed on Nuget as "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":4},"end":{"line":5}}},{"$$mdtype":"Node","errors":[],"lines":[4,5],"inline":true,"attributes":{"href":"https://www.nuget.org/packages/AgoraIoT.Edge.App.SDK"},"children":[{"$$mdtype":"Node","errors":[],"lines":[4,5],"inline":true,"attributes":{"content":"AgoraIoT.Edge.App.SDK"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":4},"end":{"line":5}}}],"type":"link","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":4},"end":{"line":5}},"redocly:::linkOriginal:href":"https://www.nuget.org/packages/AgoraIoT.Edge.App.SDK"},{"$$mdtype":"Node","errors":[],"lines":[4,5],"inline":true,"attributes":{"content":"."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":4},"end":{"line":5}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":4},"end":{"line":5}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":4},"end":{"line":5}}},{"$$mdtype":"Node","errors":[],"lines":[6,7],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[6,7],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[6,7],"inline":true,"attributes":{"content":"Several methods for getting started are provided using several environments, including:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":6},"end":{"line":7}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":6},"end":{"line":7}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":6},"end":{"line":7}}},{"$$mdtype":"Node","errors":[],"lines":[8,12],"inline":false,"attributes":{"ordered":false,"marker":"*"},"children":[{"$$mdtype":"Node","errors":[],"lines":[8,9],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[8,9],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[8,9],"inline":true,"attributes":{"content":"Command Line"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":8},"end":{"line":9}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":8},"end":{"line":9}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":8},"end":{"line":9}}},{"$$mdtype":"Node","errors":[],"lines":[9,10],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[9,10],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[9,10],"inline":true,"attributes":{"content":"Visual Studio (Community, Pro, etc.)"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":9},"end":{"line":10}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":9},"end":{"line":10}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":9},"end":{"line":10}}},{"$$mdtype":"Node","errors":[],"lines":[10,12],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[10,11],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[10,11],"inline":true,"attributes":{"content":"Visual Studio Code"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":10},"end":{"line":11}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":10},"end":{"line":11}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":10},"end":{"line":12}}}],"type":"list","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":8},"end":{"line":12}}},{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":false,"attributes":{"level":3},"children":[{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":true,"attributes":{"content":"Create a Console App"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":12},"end":{"line":13}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":12},"end":{"line":13}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":12},"end":{"line":13}}},{"$$mdtype":"Node","errors":[],"lines":[14,15],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[14,15],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[14,15],"inline":true,"attributes":{"content":"Pick the method you would like to create a new Console App."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":14},"end":{"line":15}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":14},"end":{"line":15}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":14},"end":{"line":15}}},{"$$mdtype":"Node","errors":[],"lines":[16,17],"inline":false,"attributes":{"level":4},"children":[{"$$mdtype":"Node","errors":[],"lines":[16,17],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[16,17],"inline":true,"attributes":{"content":"Creating an IIoT Edge App using Visual Studio 2022 and .NET Core 6"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":16},"end":{"line":17}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":16},"end":{"line":17}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":16},"end":{"line":17}}},{"$$mdtype":"Node","errors":[],"lines":[18,19],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[18,19],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[18,19],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[18,19],"inline":true,"attributes":{"content":"Create Console App:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":18},"end":{"line":19}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":18},"end":{"line":19}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":18},"end":{"line":19}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":18},"end":{"line":19}}},{"$$mdtype":"Node","errors":[],"lines":[20,25],"inline":false,"attributes":{"ordered":true,"marker":"."},"children":[{"$$mdtype":"Node","errors":[],"lines":[20,21],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[20,21],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[20,21],"inline":true,"attributes":{"content":"Start Visual Studio."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":20},"end":{"line":21}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":20},"end":{"line":21}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":20},"end":{"line":21}}},{"$$mdtype":"Node","errors":[],"lines":[21,22],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[21,22],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[21,22],"inline":true,"attributes":{"content":"Create a new project targeting a Console App ("},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":21},"end":{"line":22}}},{"$$mdtype":"Node","errors":[],"lines":[21,22],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[21,22],"inline":true,"attributes":{"content":"File > New Project..."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":21},"end":{"line":22}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":21},"end":{"line":22}}},{"$$mdtype":"Node","errors":[],"lines":[21,22],"inline":true,"attributes":{"content":")."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":21},"end":{"line":22}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":21},"end":{"line":22}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":21},"end":{"line":22}}},{"$$mdtype":"Node","errors":[],"lines":[22,23],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[22,23],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[22,23],"inline":true,"attributes":{"content":"Enter a Project Name, Location, and Solution Name."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":22},"end":{"line":23}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":22},"end":{"line":23}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":22},"end":{"line":23}}},{"$$mdtype":"Node","errors":[],"lines":[23,25],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[23,24],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[23,24],"inline":true,"attributes":{"content":"For the framework select .NET Core 6 (Long-term support)."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":23},"end":{"line":24}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":23},"end":{"line":24}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":23},"end":{"line":25}}}],"type":"list","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":20},"end":{"line":25}}},{"$$mdtype":"Node","errors":[],"lines":[25,26],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[25,26],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[25,26],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[25,26],"inline":true,"attributes":{"content":"Add 'AgoraIoT.Edge.App.SDK' NuGet Package:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":25},"end":{"line":26}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":25},"end":{"line":26}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":25},"end":{"line":26}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":25},"end":{"line":26}}},{"$$mdtype":"Node","errors":[],"lines":[27,33],"inline":false,"attributes":{"ordered":true,"marker":"."},"children":[{"$$mdtype":"Node","errors":[],"lines":[27,28],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[27,28],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[27,28],"inline":true,"attributes":{"content":"On the Solution Explorer, right click on the solution and select "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":27},"end":{"line":28}}},{"$$mdtype":"Node","errors":[],"lines":[27,28],"inline":true,"attributes":{"marker":"*"},"children":[{"$$mdtype":"Node","errors":[],"lines":[27,28],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[27,28],"inline":true,"attributes":{"content":"Manage Nuget Packages for Solution"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":27},"end":{"line":28}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":27},"end":{"line":28}}}],"type":"em","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":27},"end":{"line":28}}},{"$$mdtype":"Node","errors":[],"lines":[27,28],"inline":true,"attributes":{"content":" to bring up the NuGet Package Manager."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":27},"end":{"line":28}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":27},"end":{"line":28}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":27},"end":{"line":28}}},{"$$mdtype":"Node","errors":[],"lines":[28,29],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[28,29],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[28,29],"inline":true,"attributes":{"content":"Click the check box "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":28},"end":{"line":29}}},{"$$mdtype":"Node","errors":[],"lines":[28,29],"inline":true,"attributes":{"marker":"*"},"children":[{"$$mdtype":"Node","errors":[],"lines":[28,29],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[28,29],"inline":true,"attributes":{"content":"Include prerelease"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":28},"end":{"line":29}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":28},"end":{"line":29}}}],"type":"em","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":28},"end":{"line":29}}},{"$$mdtype":"Node","errors":[],"lines":[28,29],"inline":true,"attributes":{"content":" and make sure the "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":28},"end":{"line":29}}},{"$$mdtype":"Node","errors":[],"lines":[28,29],"inline":true,"attributes":{"marker":"*"},"children":[{"$$mdtype":"Node","errors":[],"lines":[28,29],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[28,29],"inline":true,"attributes":{"content":"Package Source"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":28},"end":{"line":29}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":28},"end":{"line":29}}}],"type":"em","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":28},"end":{"line":29}}},{"$$mdtype":"Node","errors":[],"lines":[28,29],"inline":true,"attributes":{"content":" is set to "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":28},"end":{"line":29}}},{"$$mdtype":"Node","errors":[],"lines":[28,29],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[28,29],"inline":true,"attributes":{"content":"Nuget"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":28},"end":{"line":29}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":28},"end":{"line":29}}},{"$$mdtype":"Node","errors":[],"lines":[28,29],"inline":true,"attributes":{"content":"."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":28},"end":{"line":29}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":28},"end":{"line":29}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":28},"end":{"line":29}}},{"$$mdtype":"Node","errors":[],"lines":[29,30],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[29,30],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[29,30],"inline":true,"attributes":{"content":"Search for "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":29},"end":{"line":30}}},{"$$mdtype":"Node","errors":[],"lines":[29,30],"inline":true,"attributes":{"marker":"*"},"children":[{"$$mdtype":"Node","errors":[],"lines":[29,30],"inline":true,"attributes":{"content":"AgoraIoT"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":29},"end":{"line":30}}}],"type":"em","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":29},"end":{"line":30}}},{"$$mdtype":"Node","errors":[],"lines":[29,30],"inline":true,"attributes":{"content":"."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":29},"end":{"line":30}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":29},"end":{"line":30}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":29},"end":{"line":30}}},{"$$mdtype":"Node","errors":[],"lines":[30,31],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[30,31],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[30,31],"inline":true,"attributes":{"content":"Select "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":30},"end":{"line":31}}},{"$$mdtype":"Node","errors":[],"lines":[30,31],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[30,31],"inline":true,"attributes":{"content":"AgoraIoT.Edge.App.SDK"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":30},"end":{"line":31}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":30},"end":{"line":31}}},{"$$mdtype":"Node","errors":[],"lines":[30,31],"inline":true,"attributes":{"content":" in the list of packages."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":30},"end":{"line":31}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":30},"end":{"line":31}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":30},"end":{"line":31}}},{"$$mdtype":"Node","errors":[],"lines":[31,33],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[31,32],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[31,32],"inline":true,"attributes":{"content":"Agree to the License Agreement."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":31},"end":{"line":32}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":31},"end":{"line":32}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":31},"end":{"line":33}}}],"type":"list","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":27},"end":{"line":33}}},{"$$mdtype":"Node","errors":[],"lines":[33,34],"inline":false,"attributes":{"level":4},"children":[{"$$mdtype":"Node","errors":[],"lines":[33,34],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[33,34],"inline":true,"attributes":{"content":"Creating an IIoT Edge App using Visual Studio Code and .NET Core 6"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":33},"end":{"line":34}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":33},"end":{"line":34}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":33},"end":{"line":34}}},{"$$mdtype":"Node","errors":[],"lines":[35,36],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[35,36],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[35,36],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[35,36],"inline":true,"attributes":{"content":"Create Console App:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":35},"end":{"line":36}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":35},"end":{"line":36}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":35},"end":{"line":36}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":35},"end":{"line":36}}},{"$$mdtype":"Node","errors":[],"lines":[37,38],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[37,38],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[37,38],"inline":true,"attributes":{"content":"Follow the Microsoft "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":37},"end":{"line":38}}},{"$$mdtype":"Node","errors":[],"lines":[37,38],"inline":true,"attributes":{"href":"https://docs.microsoft.com/en-us/dotnet/core/tutorials/with-visual-studio-code?pivots=dotnet-6-0"},"children":[{"$$mdtype":"Node","errors":[],"lines":[37,38],"inline":true,"attributes":{"content":"tutorial"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":37},"end":{"line":38}}}],"type":"link","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":37},"end":{"line":38}},"redocly:::linkOriginal:href":"https://docs.microsoft.com/en-us/dotnet/core/tutorials/with-visual-studio-code?pivots=dotnet-6-0"},{"$$mdtype":"Node","errors":[],"lines":[37,38],"inline":true,"attributes":{"content":" to create a Console app, "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":37},"end":{"line":38}}},{"$$mdtype":"Node","errors":[],"lines":[37,38],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[37,38],"inline":true,"attributes":{"content":"EXCEPT"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":37},"end":{"line":38}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":37},"end":{"line":38}}},{"$$mdtype":"Node","errors":[],"lines":[37,38],"inline":true,"attributes":{"content":" in Step 6 run the following commands:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":37},"end":{"line":38}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":37},"end":{"line":38}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":37},"end":{"line":38}}},{"$$mdtype":"Node","errors":[],"lines":[39,44],"inline":false,"attributes":{"content":"> dotnet new console -n ProjectName -f net6.0 --use-program-main\n> cd ProjectName\n> dotnet add ProjectName.csproj package AgoraIoT.Edge.App.SDK --version 1.0.11-beta\n","language":"bash"},"children":[{"$$mdtype":"Node","errors":[],"lines":[39,44],"inline":false,"attributes":{"content":"> dotnet new console -n ProjectName -f net6.0 --use-program-main\n> cd ProjectName\n> dotnet add ProjectName.csproj package AgoraIoT.Edge.App.SDK --version 1.0.11-beta\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":39},"end":{"line":44}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":39},"end":{"line":44}}},{"$$mdtype":"Node","errors":[],"lines":[45,46],"inline":false,"attributes":{"level":4},"children":[{"$$mdtype":"Node","errors":[],"lines":[45,46],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[45,46],"inline":true,"attributes":{"content":"Creating an IIoT Edge App using Command Line and .NET Core 6"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":45},"end":{"line":46}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":45},"end":{"line":46}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":45},"end":{"line":46}}},{"$$mdtype":"Node","errors":[],"lines":[47,48],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[47,48],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[47,48],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[47,48],"inline":true,"attributes":{"content":"Create Console App:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":47},"end":{"line":48}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":47},"end":{"line":48}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":47},"end":{"line":48}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":47},"end":{"line":48}}},{"$$mdtype":"Node","errors":[],"lines":[49,50],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[49,50],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[49,50],"inline":true,"attributes":{"content":"From folder where you want to create a project within, enter"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":49},"end":{"line":50}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":49},"end":{"line":50}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":49},"end":{"line":50}}},{"$$mdtype":"Node","errors":[],"lines":[51,56],"inline":false,"attributes":{"content":"> dotnet new console -n ProjectName -f net6.0 --use-program-main\n> cd ProjectName\n> dotnet add ProjectName.csproj package AgoraIoT.Edge.App.SDK --version 1.0.11-beta\n","language":"bash"},"children":[{"$$mdtype":"Node","errors":[],"lines":[51,56],"inline":false,"attributes":{"content":"> dotnet new console -n ProjectName -f net6.0 --use-program-main\n> cd ProjectName\n> dotnet add ProjectName.csproj package AgoraIoT.Edge.App.SDK --version 1.0.11-beta\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":51},"end":{"line":56}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":51},"end":{"line":56}}},{"$$mdtype":"Node","errors":[],"lines":[57,58],"inline":false,"attributes":{"level":5},"children":[{"$$mdtype":"Node","errors":[],"lines":[57,58],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[57,58],"inline":true,"attributes":{"content":"\"Hello World!\""},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":57},"end":{"line":58}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":57},"end":{"line":58}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":57},"end":{"line":58}}},{"$$mdtype":"Node","errors":[],"lines":[59,60],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[59,60],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[59,60],"inline":true,"attributes":{"content":"Replace the code in "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":59},"end":{"line":60}}},{"$$mdtype":"Node","errors":[],"lines":[59,60],"inline":true,"attributes":{"marker":"*"},"children":[{"$$mdtype":"Node","errors":[],"lines":[59,60],"inline":true,"attributes":{"content":"Program.cs"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":59},"end":{"line":60}}}],"type":"em","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":59},"end":{"line":60}}},{"$$mdtype":"Node","errors":[],"lines":[59,60],"inline":true,"attributes":{"content":" with the following code and run the application:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":59},"end":{"line":60}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":59},"end":{"line":60}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":59},"end":{"line":60}}},{"$$mdtype":"Node","errors":[],"lines":[61,64],"inline":false,"attributes":{"content":"\"Hello World!\".LogInfo();\n","language":"dotnet"},"children":[{"$$mdtype":"Node","errors":[],"lines":[61,64],"inline":false,"attributes":{"content":"\"Hello World!\".LogInfo();\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":61},"end":{"line":64}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":61},"end":{"line":64}}},{"$$mdtype":"Node","errors":[],"lines":[65,66],"inline":false,"attributes":{"level":3},"children":[{"$$mdtype":"Node","errors":[],"lines":[65,66],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[65,66],"inline":true,"attributes":{"content":"Creating an Edge Application Container Image"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":65},"end":{"line":66}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":65},"end":{"line":66}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":65},"end":{"line":66}}},{"$$mdtype":"Node","errors":[],"lines":[67,68],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[67,68],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[67,68],"inline":true,"attributes":{"content":"Using the Dockerfile.sample provided within the application, create a Dockerfile for your project."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":67},"end":{"line":68}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":67},"end":{"line":68}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":67},"end":{"line":68}}},{"$$mdtype":"Node","errors":[],"lines":[69,91],"inline":false,"attributes":{"content":"#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.\n\nFROM mcr.microsoft.com/dotnet/runtime-deps:6.0-alpine AS base\nWORKDIR /app\n\nFROM mcr.microsoft.com/dotnet/sdk:6.0 AS build\n\nWORKDIR /src\nCOPY src/. /src\n\nRUN dotnet restore \"ConsoleApp/ConsoleApp.csproj\" -r linux-musl-x64\nRUN dotnet build \"ConsoleApp/ConsoleApp.csproj\" -c Release -o /app/build --no-restore -r linux-musl-x64\n\nFROM build AS publish\nRUN dotnet publish \"ConsoleApp/ConsoleApp.csproj\" -p:PublishSingleFile=true -r linux-musl-x64 --self-contained true -p:PublishTrimmed=False -p:TrimMode=Link -c Release -o /app/publish --no-restore\n\nFROM base AS final\nWORKDIR /app\nCOPY --from=publish /app/publish .\nENTRYPOINT [\"./ConsoleApp\"]\n","language":"dockerfile"},"children":[{"$$mdtype":"Node","errors":[],"lines":[69,91],"inline":false,"attributes":{"content":"#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.\n\nFROM mcr.microsoft.com/dotnet/runtime-deps:6.0-alpine AS base\nWORKDIR /app\n\nFROM mcr.microsoft.com/dotnet/sdk:6.0 AS build\n\nWORKDIR /src\nCOPY src/. /src\n\nRUN dotnet restore \"ConsoleApp/ConsoleApp.csproj\" -r linux-musl-x64\nRUN dotnet build \"ConsoleApp/ConsoleApp.csproj\" -c Release -o /app/build --no-restore -r linux-musl-x64\n\nFROM build AS publish\nRUN dotnet publish \"ConsoleApp/ConsoleApp.csproj\" -p:PublishSingleFile=true -r linux-musl-x64 --self-contained true -p:PublishTrimmed=False -p:TrimMode=Link -c Release -o /app/publish --no-restore\n\nFROM base AS final\nWORKDIR /app\nCOPY --from=publish /app/publish .\nENTRYPOINT [\"./ConsoleApp\"]\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":69},"end":{"line":91}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":69},"end":{"line":91}}},{"$$mdtype":"Node","errors":[],"lines":[92,93],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[92,93],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[92,93],"inline":true,"attributes":{"content":"Create your docker container by running the following command within the project folder with the Dockerfile:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":92},"end":{"line":93}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":92},"end":{"line":93}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":92},"end":{"line":93}}},{"$$mdtype":"Node","errors":[],"lines":[94,97],"inline":false,"attributes":{"content":"> docker build .\n","language":"bash"},"children":[{"$$mdtype":"Node","errors":[],"lines":[94,97],"inline":false,"attributes":{"content":"> docker build .\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":94},"end":{"line":97}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.NET.md","start":{"line":94},"end":{"line":97}}}],"type":"document","annotations":[],"slots":{}},"solutions/agora/_partials/tutorial/gettingStarted.Python.md":{"$$mdtype":"Node","errors":[],"lines":[],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[0,1],"inline":false,"attributes":{"level":2},"children":[{"$$mdtype":"Node","errors":[],"lines":[0,1],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[0,1],"inline":true,"attributes":{"content":"Getting Started with the IIoT Edge App Python SDK"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":0},"end":{"line":1}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":0},"end":{"line":1}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":0},"end":{"line":1}}},{"$$mdtype":"Node","errors":[],"lines":[2,3],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[2,3],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[2,3],"inline":true,"attributes":{"content":"The Python SDK provides modules for developing an IIoT Edge App using Python 3.8 or higher.  All examples assume this has been installed."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":2},"end":{"line":3}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":2},"end":{"line":3}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":2},"end":{"line":3}}},{"$$mdtype":"Node","errors":[],"lines":[4,5],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[4,5],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[4,5],"inline":true,"attributes":{"content":"You should also update 'pip':"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":4},"end":{"line":5}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":4},"end":{"line":5}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":4},"end":{"line":5}}},{"$$mdtype":"Node","errors":[],"lines":[6,9],"inline":false,"attributes":{"content":"> pip install -U pip\n","language":"bash"},"children":[{"$$mdtype":"Node","errors":[],"lines":[6,9],"inline":false,"attributes":{"content":"> pip install -U pip\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":6},"end":{"line":9}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":6},"end":{"line":9}}},{"$$mdtype":"Node","errors":[],"lines":[10,11],"inline":false,"attributes":{"level":3},"children":[{"$$mdtype":"Node","errors":[],"lines":[10,11],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[10,11],"inline":true,"attributes":{"content":"Create an Edge App"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":10},"end":{"line":11}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":10},"end":{"line":11}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":10},"end":{"line":11}}},{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":true,"attributes":{"content":"The IIoT Edge App Python SDK provides the following modules combined within one Python package called "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":12},"end":{"line":13}}},{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":true,"attributes":{"href":"https://pypi.org/project/agoraiot/"},"children":[{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":true,"attributes":{"content":"agoraiot"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":12},"end":{"line":13}}}],"type":"link","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":12},"end":{"line":13}},"redocly:::linkOriginal:href":"https://pypi.org/project/agoraiot/"},{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":true,"attributes":{"content":":"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":12},"end":{"line":13}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":12},"end":{"line":13}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":12},"end":{"line":13}}},{"$$mdtype":"Node","errors":[],"lines":[14,19],"inline":false,"attributes":{"ordered":false,"marker":"*"},"children":[{"$$mdtype":"Node","errors":[],"lines":[14,15],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[14,15],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[14,15],"inline":true,"attributes":{"content":"agora_logging"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":14},"end":{"line":15}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":14},"end":{"line":15}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":14},"end":{"line":15}}},{"$$mdtype":"Node","errors":[],"lines":[15,16],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[15,16],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[15,16],"inline":true,"attributes":{"content":"agora_busclient"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":15},"end":{"line":16}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":15},"end":{"line":16}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":15},"end":{"line":16}}},{"$$mdtype":"Node","errors":[],"lines":[16,17],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[16,17],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[16,17],"inline":true,"attributes":{"content":"agora_config"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":16},"end":{"line":17}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":16},"end":{"line":17}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":16},"end":{"line":17}}},{"$$mdtype":"Node","errors":[],"lines":[17,19],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[17,18],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[17,18],"inline":true,"attributes":{"content":"agora_utils"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":17},"end":{"line":18}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":17},"end":{"line":18}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":17},"end":{"line":19}}}],"type":"list","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":14},"end":{"line":19}}},{"$$mdtype":"Node","errors":[],"lines":[19,20],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[19,20],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[19,20],"inline":true,"attributes":{"content":"To install the package use:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":19},"end":{"line":20}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":19},"end":{"line":20}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":19},"end":{"line":20}}},{"$$mdtype":"Node","errors":[],"lines":[21,24],"inline":false,"attributes":{"content":"> pip install agoraiot\n","language":"cmd"},"children":[{"$$mdtype":"Node","errors":[],"lines":[21,24],"inline":false,"attributes":{"content":"> pip install agoraiot\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":21},"end":{"line":24}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":21},"end":{"line":24}}},{"$$mdtype":"Node","errors":[],"lines":[25,26],"inline":false,"attributes":{"level":5},"children":[{"$$mdtype":"Node","errors":[],"lines":[25,26],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[25,26],"inline":true,"attributes":{"content":"\"Hello World!\""},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":25},"end":{"line":26}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":25},"end":{"line":26}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":25},"end":{"line":26}}},{"$$mdtype":"Node","errors":[],"lines":[27,28],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[27,28],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[27,28],"inline":true,"attributes":{"content":"Create a "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":27},"end":{"line":28}}},{"$$mdtype":"Node","errors":[],"lines":[27,28],"inline":true,"attributes":{"content":"helloWorld.py"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":27},"end":{"line":28}}},{"$$mdtype":"Node","errors":[],"lines":[27,28],"inline":true,"attributes":{"content":" file:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":27},"end":{"line":28}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":27},"end":{"line":28}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":27},"end":{"line":28}}},{"$$mdtype":"Node","errors":[],"lines":[29,34],"inline":false,"attributes":{"content":"from agoraiot import logger\n\nlogger.info(\"Hello World!\")\n","language":"python"},"children":[{"$$mdtype":"Node","errors":[],"lines":[29,34],"inline":false,"attributes":{"content":"from agoraiot import logger\n\nlogger.info(\"Hello World!\")\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":29},"end":{"line":34}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":29},"end":{"line":34}}},{"$$mdtype":"Node","errors":[],"lines":[35,36],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[35,36],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[35,36],"inline":true,"attributes":{"content":"Execute using Python:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":35},"end":{"line":36}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":35},"end":{"line":36}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":35},"end":{"line":36}}},{"$$mdtype":"Node","errors":[],"lines":[37,40],"inline":false,"attributes":{"content":"> python helloWorld.py\n","language":"cmd"},"children":[{"$$mdtype":"Node","errors":[],"lines":[37,40],"inline":false,"attributes":{"content":"> python helloWorld.py\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":37},"end":{"line":40}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":37},"end":{"line":40}}},{"$$mdtype":"Node","errors":[],"lines":[41,42],"inline":false,"attributes":{"level":3},"children":[{"$$mdtype":"Node","errors":[],"lines":[41,42],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[41,42],"inline":true,"attributes":{"content":"Creating an Edge Application Container Image"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":41},"end":{"line":42}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":41},"end":{"line":42}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":41},"end":{"line":42}}},{"$$mdtype":"Node","errors":[],"lines":[43,44],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[43,44],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[43,44],"inline":true,"attributes":{"content":"Create the following files:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":43},"end":{"line":44}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":43},"end":{"line":44}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":43},"end":{"line":44}}},{"$$mdtype":"Node","errors":[],"lines":[45,49],"inline":false,"attributes":{"content":"helloworld.py [from above]\nDockerfile\n","language":"text"},"children":[{"$$mdtype":"Node","errors":[],"lines":[45,49],"inline":false,"attributes":{"content":"helloworld.py [from above]\nDockerfile\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":45},"end":{"line":49}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":45},"end":{"line":49}}},{"$$mdtype":"Node","errors":[],"lines":[50,51],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[50,51],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[50,51],"inline":true,"attributes":{"content":"Dockerfile:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":50},"end":{"line":51}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":50},"end":{"line":51}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":50},"end":{"line":51}}},{"$$mdtype":"Node","errors":[],"lines":[52,62],"inline":false,"attributes":{"content":"FROM alpine:3.17\nUSER root\nENV PATH=\"${PATH}:/sbin\"\nRUN apk add bash gcompat libc6-compat icu-libs krb5-libs libgcc libintl libssl1.1 libstdc++ zlib python3 py3-pip\nRUN pip install agoraiot\nADD ./src src\nCMD python3 src/helloWorld.py\n\n","language":"Dockerfile"},"children":[{"$$mdtype":"Node","errors":[],"lines":[52,62],"inline":false,"attributes":{"content":"FROM alpine:3.17\nUSER root\nENV PATH=\"${PATH}:/sbin\"\nRUN apk add bash gcompat libc6-compat icu-libs krb5-libs libgcc libintl libssl1.1 libstdc++ zlib python3 py3-pip\nRUN pip install agoraiot\nADD ./src src\nCMD python3 src/helloWorld.py\n\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":52},"end":{"line":62}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":52},"end":{"line":62}}},{"$$mdtype":"Node","errors":[],"lines":[63,64],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[63,64],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[63,64],"inline":true,"attributes":{"content":"Run the following command:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":63},"end":{"line":64}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":63},"end":{"line":64}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":63},"end":{"line":64}}},{"$$mdtype":"Node","errors":[],"lines":[65,68],"inline":false,"attributes":{"content":"> docker build .\n","language":"cmd"},"children":[{"$$mdtype":"Node","errors":[],"lines":[65,68],"inline":false,"attributes":{"content":"> docker build .\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":65},"end":{"line":68}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/gettingStarted.Python.md","start":{"line":65},"end":{"line":68}}}],"type":"document","annotations":[],"slots":{}},"solutions/agora/_partials/tutorial/loggingtutorial.md":{"$$mdtype":"Node","errors":[],"lines":[],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[0,5],"inline":false,"attributes":{"content":"-------------------------------------------------------------------------------\n                                                 L O G G I N G  T U T O R I A L\n-------------------------------------------------------------------------------"},"children":[],"type":"comment","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":0},"end":{"line":5}}},{"$$mdtype":"Node","errors":[],"lines":[6,7],"inline":false,"attributes":{"level":2},"children":[{"$$mdtype":"Node","errors":[],"lines":[6,7],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[6,7],"inline":true,"attributes":{"content":"Logging Tutorial"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":6},"end":{"line":7}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":6},"end":{"line":7}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":6},"end":{"line":7}}},{"$$mdtype":"Node","errors":[],"lines":[8,9],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[8,9],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[8,9],"inline":true,"attributes":{"content":"By the end of the logging tutorial you should feel comfortable logging messages and understand logging level using the IIoT Edge App SDK.  There is nothing extremely special about the logging capability of the SDK compared to open source loggers, but it (like all others) has its own configuration settings which is integrally tied to the SDK's configuration capabilities."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":8},"end":{"line":9}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":8},"end":{"line":9}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":8},"end":{"line":9}}},{"$$mdtype":"Node","errors":[],"lines":[10,11],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[10,11],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[10,11],"inline":true,"attributes":{"content":"Logging is required by the SDK to allow the SDK the ability to log information about itself."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":10},"end":{"line":11}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":10},"end":{"line":11}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":10},"end":{"line":11}}},{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":true,"attributes":{"content":"Before you begin"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":12},"end":{"line":13}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":12},"end":{"line":13}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":12},"end":{"line":13}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":12},"end":{"line":13}}},{"$$mdtype":"Node","errors":[],"lines":[14,15],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[14,15],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[14,15],"inline":true,"attributes":{"content":"You should have completed the "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":14},"end":{"line":15}}},{"$$mdtype":"Node","errors":[],"lines":[14,15],"inline":true,"attributes":{"href":"/solutions/agora/quickstartguide"},"children":[{"$$mdtype":"Node","errors":[],"lines":[14,15],"inline":true,"attributes":{"content":"Getting Started"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":14},"end":{"line":15}}}],"type":"link","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":14},"end":{"line":15}},"redocly:::linkOriginal:href":"../../quickstartguide.md"},{"$$mdtype":"Node","errors":[],"lines":[14,15],"inline":true,"attributes":{"content":" section to integrate the AgoraIoT.Edge.App.SDK into your project before starting and have a project ready to use with the tutorial."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":14},"end":{"line":15}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":14},"end":{"line":15}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":14},"end":{"line":15}}},{"$$mdtype":"Node","errors":[],"lines":[16,17],"inline":false,"attributes":{"level":3},"children":[{"$$mdtype":"Node","errors":[],"lines":[16,17],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[16,17],"inline":true,"attributes":{"content":"Logging with String Extensions"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":16},"end":{"line":17}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":16},"end":{"line":17}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":16},"end":{"line":17}}},{"$$mdtype":"Node","errors":[],"lines":[18,19],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[18,19],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[18,19],"inline":true,"attributes":{"content":"In general, most logging can be accomplished just using String Extensions for Logging, which is what this tutorial focuses on."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":18},"end":{"line":19}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":18},"end":{"line":19}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":18},"end":{"line":19}}},{"$$mdtype":"Node","errors":[],"lines":[20,21],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[20,21],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[20,21],"inline":true,"attributes":{"content":"From the IDE, open "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":20},"end":{"line":21}}},{"$$mdtype":"Node","errors":[],"lines":[20,21],"inline":true,"attributes":{"content":"Program.cs"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":20},"end":{"line":21}}},{"$$mdtype":"Node","errors":[],"lines":[20,21],"inline":true,"attributes":{"content":" within the Console application created in the "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":20},"end":{"line":21}}},{"$$mdtype":"Node","errors":[],"lines":[20,21],"inline":true,"attributes":{"href":"/solutions/agora/quickstartguide"},"children":[{"$$mdtype":"Node","errors":[],"lines":[20,21],"inline":true,"attributes":{"content":"Getting Started"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":20},"end":{"line":21}}}],"type":"link","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":20},"end":{"line":21}},"redocly:::linkOriginal:href":"../../quickstartguide.md"},{"$$mdtype":"Node","errors":[],"lines":[20,21],"inline":true,"attributes":{"content":" tutorial and copy the code below into it:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":20},"end":{"line":21}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":20},"end":{"line":21}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":20},"end":{"line":21}}},{"$$mdtype":"Node","errors":[],"lines":[22,38],"inline":false,"attributes":{"content":"# [NET](#tab/net)\n\n```csharp\npublic class Program\n{\n    public static void Main(string[] args)\n    {\n        \"Starting\".LogHeading();\n        \"Hello from Module!\".LogWarn();\n        $\"The current local time is {DateTime.Now}.\".LogInfo();\n        \"A debug message\".LogDebug();\n        \"A trace message\".LogTrace();\n        \"Stopping\".LogHeading();\n    }\n}\n```"},"children":[],"type":"comment","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":22},"end":{"line":38}}},{"$$mdtype":"Node","errors":[],"lines":[39,40],"inline":false,"attributes":{"level":1},"children":[{"$$mdtype":"Node","errors":[],"lines":[39,40],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[39,40],"inline":true,"attributes":{"href":"#tab/python"},"children":[{"$$mdtype":"Node","errors":[],"lines":[39,40],"inline":true,"attributes":{"content":"Python"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":39},"end":{"line":40}}}],"type":"link","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":39},"end":{"line":40}},"redocly:::linkOriginal:href":"#tab/python"}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":39},"end":{"line":40}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":39},"end":{"line":40}}},{"$$mdtype":"Node","errors":[],"lines":[41,51],"inline":false,"attributes":{"content":"from agoraiot import logger\nimport time\nlogger.heading(\"Starting\")\nlogger.warn(\"Hello from Module!\")\nlogger.info(f\"The current local time is {time.now()}.\")\nlogger.debug(\"A debug message\")\nlogger.trace(\"A trace message\")\nlogger.heading(\"Stopping\")\n","language":"python"},"children":[{"$$mdtype":"Node","errors":[],"lines":[41,51],"inline":false,"attributes":{"content":"from agoraiot import logger\nimport time\nlogger.heading(\"Starting\")\nlogger.warn(\"Hello from Module!\")\nlogger.info(f\"The current local time is {time.now()}.\")\nlogger.debug(\"A debug message\")\nlogger.trace(\"A trace message\")\nlogger.heading(\"Stopping\")\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":41},"end":{"line":51}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":41},"end":{"line":51}}},{"$$mdtype":"Node","errors":[],"lines":[52,53],"inline":false,"attributes":{},"children":[],"type":"hr","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":52},"end":{"line":53}}},{"$$mdtype":"Node","errors":[],"lines":[54,55],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[54,55],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[54,55],"inline":true,"attributes":{"content":"Run the application.  You should see the output similar to what is below in the application's Console window."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":54},"end":{"line":55}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":54},"end":{"line":55}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":54},"end":{"line":55}}},{"$$mdtype":"Node","errors":[],"lines":[56,66],"inline":false,"attributes":{"content":"-------------------------------------------------------------------------------\n(33)                                                                   Starting\n-------------------------------------------------------------------------------\nW(36) - Hello from Module!\nI(36) - The current local time is 5/3/2022 5:17:13 PM.\n-------------------------------------------------------------------------------\n(37)                                                                   Stopping\n-------------------------------------------------------------------------------\n","language":"plaintext"},"children":[{"$$mdtype":"Node","errors":[],"lines":[56,66],"inline":false,"attributes":{"content":"-------------------------------------------------------------------------------\n(33)                                                                   Starting\n-------------------------------------------------------------------------------\nW(36) - Hello from Module!\nI(36) - The current local time is 5/3/2022 5:17:13 PM.\n-------------------------------------------------------------------------------\n(37)                                                                   Stopping\n-------------------------------------------------------------------------------\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":56},"end":{"line":66}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":56},"end":{"line":66}}},{"$$mdtype":"Node","errors":[],"lines":[67,68],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[67,68],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[67,68],"inline":true,"attributes":{"content":"Within the log, each message begins with the first letter of the LogLevel followed by the number of milliseconds since the application started in parentheses.  If the LogLevel of the message being written is LogLevel.Info, the message will not contain the file, line number, and member name."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":67},"end":{"line":68}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":67},"end":{"line":68}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":67},"end":{"line":68}}},{"$$mdtype":"Node","errors":[],"lines":[69,70],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[69,70],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[69,70],"inline":true,"attributes":{"content":"Notice that the Debug and Trace messages did not appear. This is because the Logging Level defaults to LogLevel.Info and above. To adjust the level of logging messages output by the Logger for troubleshooting and development use the "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":69},"end":{"line":70}}},{"$$mdtype":"Node","errors":[],"lines":[69,70],"inline":true,"attributes":{"content":"AEA2:LogLevel"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":69},"end":{"line":70}}},{"$$mdtype":"Node","errors":[],"lines":[69,70],"inline":true,"attributes":{"content":" configuration setting.  Assigning LogLevel sets the minimum level to be output, which corresponds to the LogLevel enumeration."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":69},"end":{"line":70}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":69},"end":{"line":70}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":69},"end":{"line":70}}},{"$$mdtype":"Node","errors":[],"lines":[71,79],"inline":false,"attributes":{"ordered":false,"marker":"-"},"children":[{"$$mdtype":"Node","errors":[],"lines":[71,72],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[71,72],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[71,72],"inline":true,"attributes":{"content":"Trace (0): Finest level of logging"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":71},"end":{"line":72}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":71},"end":{"line":72}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":71},"end":{"line":72}}},{"$$mdtype":"Node","errors":[],"lines":[72,73],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[72,73],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[72,73],"inline":true,"attributes":{"content":"Debug (1): Used for debugging - specifically log values that should not go to Release"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":72},"end":{"line":73}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":72},"end":{"line":73}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":72},"end":{"line":73}}},{"$$mdtype":"Node","errors":[],"lines":[73,74],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[73,74],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[73,74],"inline":true,"attributes":{"content":"Info (2): General logging information - filename, line number,  and method are not included"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":73},"end":{"line":74}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":73},"end":{"line":74}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":73},"end":{"line":74}}},{"$$mdtype":"Node","errors":[],"lines":[74,75],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[74,75],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[74,75],"inline":true,"attributes":{"content":"Warn (3): Used to indicate something is not happening as expected"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":74},"end":{"line":75}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":74},"end":{"line":75}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":74},"end":{"line":75}}},{"$$mdtype":"Node","errors":[],"lines":[75,76],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[75,76],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[75,76],"inline":true,"attributes":{"content":"Error (4): Indicates an error occurred, but not fatally.  Errors are used to indicate that the configuration error or unexpected software problem.  It should not be used to log problems with the workflow or process that the application is performing."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":75},"end":{"line":76}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":75},"end":{"line":76}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":75},"end":{"line":76}}},{"$$mdtype":"Node","errors":[],"lines":[76,77],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[76,77],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[76,77],"inline":true,"attributes":{"content":"Fatal (5): Generally used just before the application is giving up, just before it stops."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":76},"end":{"line":77}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":76},"end":{"line":77}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":76},"end":{"line":77}}},{"$$mdtype":"Node","errors":[],"lines":[77,79],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[77,78],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[77,78],"inline":true,"attributes":{"content":"Off (6): Turns off all logging."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":77},"end":{"line":78}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":77},"end":{"line":78}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":77},"end":{"line":79}}}],"type":"list","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":71},"end":{"line":79}}},{"$$mdtype":"Node","errors":[],"lines":[79,80],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[79,80],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[79,80],"inline":true,"attributes":{"content":"Additionally, the level of logging can be adjusted using configuration and by setting the level directly on the logger."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":79},"end":{"line":80}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":79},"end":{"line":80}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":79},"end":{"line":80}}},{"$$mdtype":"Node","errors":[],"lines":[81,82],"inline":false,"attributes":{"level":3},"children":[{"$$mdtype":"Node","errors":[],"lines":[81,82],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[81,82],"inline":true,"attributes":{"content":"Configuration Settings affecting Logging using 'AEA.json' configuration file."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":81},"end":{"line":82}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":81},"end":{"line":82}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":81},"end":{"line":82}}},{"$$mdtype":"Node","errors":[],"lines":[83,92],"inline":false,"attributes":{"content":"{\n    ...\n    \"AEA2\": {\n        \"LogLevel\": \"Debug\"\n    }\n    ...\n}\n","language":"json"},"children":[{"$$mdtype":"Node","errors":[],"lines":[83,92],"inline":false,"attributes":{"content":"{\n    ...\n    \"AEA2\": {\n        \"LogLevel\": \"Debug\"\n    }\n    ...\n}\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":83},"end":{"line":92}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":83},"end":{"line":92}}},{"$$mdtype":"Node","errors":[],"lines":[93,94],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[93,94],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[93,94],"inline":true,"attributes":{"content":"Programmatically, the default logging level can be overridden calling the appropriate method on the logger."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":93},"end":{"line":94}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":93},"end":{"line":94}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":93},"end":{"line":94}}},{"$$mdtype":"Node","errors":[],"lines":[95,97],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[95,97],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[95,97],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[95,97],"inline":true,"attributes":{"content":"[!IMPORTANT]"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":95},"end":{"line":97}}},{"$$mdtype":"Node","errors":[],"lines":[95,97],"inline":true,"attributes":{},"children":[],"type":"softbreak","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":95},"end":{"line":97}}},{"$$mdtype":"Node","errors":[],"lines":[95,97],"inline":true,"attributes":{"content":"Setting LogLevel programmatically via the logger API can have unexpected results because Configuration changes will cause the LogLevel to be reset.  To override any configuration setting, use configuration overrides."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":95},"end":{"line":97}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":95},"end":{"line":97}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":95},"end":{"line":97}}}],"type":"blockquote","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":95},"end":{"line":97}}},{"$$mdtype":"Node","errors":[],"lines":[98,99],"inline":false,"attributes":{"level":4},"children":[{"$$mdtype":"Node","errors":[],"lines":[98,99],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[98,99],"inline":true,"attributes":{"content":"Setting log level using the logger"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":98},"end":{"line":99}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":98},"end":{"line":99}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":98},"end":{"line":99}}},{"$$mdtype":"Node","errors":[],"lines":[100,107],"inline":false,"attributes":{"content":"# [NET](#tab/net)\n\n```csharp\nusing static Agora.SDK;\n\nLog.SetLevel(Agora.Logging.LogLevel.Debug);\n```"},"children":[],"type":"comment","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":100},"end":{"line":107}}},{"$$mdtype":"Node","errors":[],"lines":[108,109],"inline":false,"attributes":{"level":1},"children":[{"$$mdtype":"Node","errors":[],"lines":[108,109],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[108,109],"inline":true,"attributes":{"href":"#tab/python"},"children":[{"$$mdtype":"Node","errors":[],"lines":[108,109],"inline":true,"attributes":{"content":"Python"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":108},"end":{"line":109}}}],"type":"link","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":108},"end":{"line":109}},"redocly:::linkOriginal:href":"#tab/python"}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":108},"end":{"line":109}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":108},"end":{"line":109}}},{"$$mdtype":"Node","errors":[],"lines":[110,116],"inline":false,"attributes":{"content":"from agoraiot import logger, LogLevel\n\nlogger.set_level(LogLevel.DEBUG)\n\n","language":"python"},"children":[{"$$mdtype":"Node","errors":[],"lines":[110,116],"inline":false,"attributes":{"content":"from agoraiot import logger, LogLevel\n\nlogger.set_level(LogLevel.DEBUG)\n\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":110},"end":{"line":116}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":110},"end":{"line":116}}},{"$$mdtype":"Node","errors":[],"lines":[116,117],"inline":false,"attributes":{},"children":[],"type":"hr","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":116},"end":{"line":117}}},{"$$mdtype":"Node","errors":[],"lines":[118,119],"inline":false,"attributes":{"level":4},"children":[{"$$mdtype":"Node","errors":[],"lines":[118,119],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[118,119],"inline":true,"attributes":{"content":"Setting log level using configuration overrides"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":118},"end":{"line":119}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":118},"end":{"line":119}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":118},"end":{"line":119}}},{"$$mdtype":"Node","errors":[],"lines":[120,128],"inline":false,"attributes":{"content":"# [NET](#tab/net)\n\n```csharp\nusing static Agora.SDK;\n\nConfig.Overrides[\"AEA2:LogLevel\"] = \"Debug\";\nConfig.Build();\n```"},"children":[],"type":"comment","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":120},"end":{"line":128}}},{"$$mdtype":"Node","errors":[],"lines":[129,130],"inline":false,"attributes":{"level":1},"children":[{"$$mdtype":"Node","errors":[],"lines":[129,130],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[129,130],"inline":true,"attributes":{"href":"#tab/python"},"children":[{"$$mdtype":"Node","errors":[],"lines":[129,130],"inline":true,"attributes":{"content":"Python"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":129},"end":{"line":130}}}],"type":"link","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":129},"end":{"line":130}},"redocly:::linkOriginal:href":"#tab/python"}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":129},"end":{"line":130}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":129},"end":{"line":130}}},{"$$mdtype":"Node","errors":[],"lines":[131,137],"inline":false,"attributes":{"content":"from agoraiot import config\n\nconfig.overrides[\"AEA2:LogLevel\"] = \"Debug\"\nconfig.build();\n","language":"python"},"children":[{"$$mdtype":"Node","errors":[],"lines":[131,137],"inline":false,"attributes":{"content":"from agoraiot import config\n\nconfig.overrides[\"AEA2:LogLevel\"] = \"Debug\"\nconfig.build();\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":131},"end":{"line":137}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/loggingtutorial.md","start":{"line":131},"end":{"line":137}}}],"type":"document","annotations":[],"slots":{}},"solutions/agora/_partials/tutorial/redisclienttutorial.md":{"$$mdtype":"Node","errors":[],"lines":[],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[0,1],"inline":false,"attributes":{"level":2},"children":[{"$$mdtype":"Node","errors":[],"lines":[0,1],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[0,1],"inline":true,"attributes":{"content":"Redis Client Tutorial"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":0},"end":{"line":1}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":0},"end":{"line":1}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":0},"end":{"line":1}}},{"$$mdtype":"Node","errors":[],"lines":[2,3],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[2,3],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[2,3],"inline":true,"attributes":{"content":"This tutorial provides information about key-value NoSQL type technology."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":2},"end":{"line":3}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":2},"end":{"line":3}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":2},"end":{"line":3}}},{"$$mdtype":"Node","errors":[],"lines":[4,5],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[4,5],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[4,5],"inline":true,"attributes":{"href":"https://redis.io/"},"children":[{"$$mdtype":"Node","errors":[],"lines":[4,5],"inline":true,"attributes":{"content":"Redis"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":4},"end":{"line":5}}}],"type":"link","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":4},"end":{"line":5}},"redocly:::linkOriginal:href":"https://redis.io/"},{"$$mdtype":"Node","errors":[],"lines":[4,5],"inline":true,"attributes":{"content":" is a NoSQL key-value cache that stores information in a hash table format. It provides the possibilities to store different type of structured data like strings, hashes, lists, sets, sorted sets, bitmaps and hyperloglogs."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":4},"end":{"line":5}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":4},"end":{"line":5}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":4},"end":{"line":5}}},{"$$mdtype":"Node","errors":[],"lines":[6,7],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[6,7],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[6,7],"inline":true,"attributes":{"content":"With Edge SK 2.0 RedisClient functionality, developers can easily use Redis Server deployed on the gateway as a part of the Hermes Core Release."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":6},"end":{"line":7}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":6},"end":{"line":7}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":6},"end":{"line":7}}},{"$$mdtype":"Node","errors":[],"lines":[8,9],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[8,9],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[8,9],"inline":true,"attributes":{"content":"Namespace: "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":8},"end":{"line":9}}},{"$$mdtype":"Node","errors":[],"lines":[8,9],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[8,9],"inline":true,"attributes":{"content":"Agora.Edge"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":8},"end":{"line":9}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":8},"end":{"line":9}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":8},"end":{"line":9}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":8},"end":{"line":9}}},{"$$mdtype":"Node","errors":[],"lines":[10,11],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[10,11],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[10,11],"inline":true,"attributes":{"content":"The RedisClient is implemented as a singleton and it is a required component of the SDK. This singleton exposes a full-fledged RedisClient to interact with the server to store, retrieve values from Radis Server etc."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":10},"end":{"line":11}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":10},"end":{"line":11}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":10},"end":{"line":11}}},{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":true,"attributes":{"content":"RedisClient can be configured from within the "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":12},"end":{"line":13}}},{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":true,"attributes":{"content":"AEA.json"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":12},"end":{"line":13}}},{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":true,"attributes":{"content":" as shown below."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":12},"end":{"line":13}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":12},"end":{"line":13}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":12},"end":{"line":13}}},{"$$mdtype":"Node","errors":[],"lines":[14,15],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[14,15],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[14,15],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[14,15],"inline":true,"attributes":{"content":"Configuration Parameters:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":14},"end":{"line":15}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":14},"end":{"line":15}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":14},"end":{"line":15}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":14},"end":{"line":15}}},{"$$mdtype":"Node","errors":[],"lines":[16,20],"inline":false,"attributes":{"ordered":false,"marker":"*"},"children":[{"$$mdtype":"Node","errors":[],"lines":[16,17],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[16,17],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[16,17],"inline":true,"attributes":{"content":"Name (string)"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":16},"end":{"line":17}}},{"$$mdtype":"Node","errors":[],"lines":[16,17],"inline":true,"attributes":{"content":" - Used to set the RedisClient Name that identifies the client to the server. Default: "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":16},"end":{"line":17}}},{"$$mdtype":"Node","errors":[],"lines":[16,17],"inline":true,"attributes":{"content":"Entry Assembly Name"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":16},"end":{"line":17}}},{"$$mdtype":"Node","errors":[],"lines":[16,17],"inline":true,"attributes":{"content":".  Although \"optional\", it is recommended to specify the \"Name\" setting in the "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":16},"end":{"line":17}}},{"$$mdtype":"Node","errors":[],"lines":[16,17],"inline":true,"attributes":{"content":"AEA.json"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":16},"end":{"line":17}}},{"$$mdtype":"Node","errors":[],"lines":[16,17],"inline":true,"attributes":{"content":" configuration file."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":16},"end":{"line":17}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":16},"end":{"line":17}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":16},"end":{"line":17}}},{"$$mdtype":"Node","errors":[],"lines":[17,18],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[17,18],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[17,18],"inline":true,"attributes":{"content":"AEA2:RedisClient:Server (string)"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":17},"end":{"line":18}}},{"$$mdtype":"Node","errors":[],"lines":[17,18],"inline":true,"attributes":{"content":": Server name hosting the Redis Server. Default: "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":17},"end":{"line":18}}},{"$$mdtype":"Node","errors":[],"lines":[17,18],"inline":true,"attributes":{"content":"localhost"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":17},"end":{"line":18}}},{"$$mdtype":"Node","errors":[],"lines":[17,18],"inline":true,"attributes":{"content":".  Commonly, this is set to the name of the container running Redis Server when deployed in a container."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":17},"end":{"line":18}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":17},"end":{"line":18}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":17},"end":{"line":18}}},{"$$mdtype":"Node","errors":[],"lines":[18,20],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[18,19],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[18,19],"inline":true,"attributes":{"content":"AEA2:RedisClient:Port (uint)"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":18},"end":{"line":19}}},{"$$mdtype":"Node","errors":[],"lines":[18,19],"inline":true,"attributes":{"content":": Server Port hosting the Redis Server. Default: "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":18},"end":{"line":19}}},{"$$mdtype":"Node","errors":[],"lines":[18,19],"inline":true,"attributes":{"content":"6379"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":18},"end":{"line":19}}},{"$$mdtype":"Node","errors":[],"lines":[18,19],"inline":true,"attributes":{"content":". Commonly, this is set as a container create option with the port exposing Redis Server when deployed as a container."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":18},"end":{"line":19}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":18},"end":{"line":19}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":18},"end":{"line":20}}}],"type":"list","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":16},"end":{"line":20}}},{"$$mdtype":"Node","errors":[],"lines":[20,21],"inline":false,"attributes":{"level":4},"children":[{"$$mdtype":"Node","errors":[],"lines":[20,21],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[20,21],"inline":true,"attributes":{"content":"Example of "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":20},"end":{"line":21}}},{"$$mdtype":"Node","errors":[],"lines":[20,21],"inline":true,"attributes":{"content":"AEA.json"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":20},"end":{"line":21}}},{"$$mdtype":"Node","errors":[],"lines":[20,21],"inline":true,"attributes":{"content":" configuration file:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":20},"end":{"line":21}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":20},"end":{"line":21}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":20},"end":{"line":21}}},{"$$mdtype":"Node","errors":[],"lines":[22,34],"inline":false,"attributes":{"content":"{\n    \"Name\": \"Sender\",\n    \"AEA2\": {\n       \"LogLevel\": \"Trace\", \n        \"RedisClient\": {\n            \"Server\": \"localhost\",\n            \"Port\": 6379,\n        }\n    }\n}\n","language":"json"},"children":[{"$$mdtype":"Node","errors":[],"lines":[22,34],"inline":false,"attributes":{"content":"{\n    \"Name\": \"Sender\",\n    \"AEA2\": {\n       \"LogLevel\": \"Trace\", \n        \"RedisClient\": {\n            \"Server\": \"localhost\",\n            \"Port\": 6379,\n        }\n    }\n}\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":22},"end":{"line":34}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":22},"end":{"line":34}}},{"$$mdtype":"Node","errors":[],"lines":[35,36,39,40],"inline":false,"attributes":{"type":"info"},"children":[{"$$mdtype":"Node","errors":[],"lines":[36,39],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[36,39],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[36,39],"inline":true,"attributes":{"content":"If the Redis server is temporarily unreachable at startup or an existing connection is lost during runtime,"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":36},"end":{"line":39}}},{"$$mdtype":"Node","errors":[],"lines":[36,39],"inline":true,"attributes":{},"children":[],"type":"softbreak","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":36},"end":{"line":39}}},{"$$mdtype":"Node","errors":[],"lines":[36,39],"inline":true,"attributes":{"content":"the SDK will attempt to reconnect to the redis server using an exponential backoff retry mechanism."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":36},"end":{"line":39}}},{"$$mdtype":"Node","errors":[],"lines":[36,39],"inline":true,"attributes":{},"children":[],"type":"softbreak","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":36},"end":{"line":39}}},{"$$mdtype":"Node","errors":[],"lines":[36,39],"inline":true,"attributes":{"content":"Among the Redis errors that will trigger a retry are "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":36},"end":{"line":39}}},{"$$mdtype":"Node","errors":[],"lines":[36,39],"inline":true,"attributes":{"content":"ConnectionError"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":36},"end":{"line":39}}},{"$$mdtype":"Node","errors":[],"lines":[36,39],"inline":true,"attributes":{"content":", "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":36},"end":{"line":39}}},{"$$mdtype":"Node","errors":[],"lines":[36,39],"inline":true,"attributes":{"content":"TimeoutError"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":36},"end":{"line":39}}},{"$$mdtype":"Node","errors":[],"lines":[36,39],"inline":true,"attributes":{"content":", "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":36},"end":{"line":39}}},{"$$mdtype":"Node","errors":[],"lines":[36,39],"inline":true,"attributes":{"content":"ConnectionResetError"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":36},"end":{"line":39}}},{"$$mdtype":"Node","errors":[],"lines":[36,39],"inline":true,"attributes":{"content":" and "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":36},"end":{"line":39}}},{"$$mdtype":"Node","errors":[],"lines":[36,39],"inline":true,"attributes":{"content":"ConnectionAbortedError"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":36},"end":{"line":39}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":36},"end":{"line":39}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":36},"end":{"line":39}}}],"type":"tag","tag":"admonition","annotations":[{"type":"attribute","name":"type","value":"info"}],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":35},"end":{"line":36}}},{"$$mdtype":"Node","errors":[],"lines":[41,42],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[41,42],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[41,42],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[41,42],"inline":true,"attributes":{"content":"Properties:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":41},"end":{"line":42}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":41},"end":{"line":42}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":41},"end":{"line":42}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":41},"end":{"line":42}}},{"$$mdtype":"Node","errors":[],"lines":[43,49],"inline":false,"attributes":{"ordered":false,"marker":"*"},"children":[{"$$mdtype":"Node","errors":[],"lines":[43,45],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[43,44],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[43,44],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[43,44],"inline":true,"attributes":{"content":"Instance: Redis"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":43},"end":{"line":44}}},{"$$mdtype":"Node","errors":[],"lines":[43,44],"inline":true,"attributes":{"content":" - Used to access the singleton instance and is the same as using the Agora.SDK.RedisClient."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":43},"end":{"line":44}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":43},"end":{"line":44}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":43},"end":{"line":44}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":43},"end":{"line":45}}},{"$$mdtype":"Node","errors":[],"lines":[45,47],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[45,46],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[45,46],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[45,46],"inline":true,"attributes":{"content":"Client"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":45},"end":{"line":46}}},{"$$mdtype":"Node","errors":[],"lines":[45,46],"inline":true,"attributes":{"content":" - Used to access the Redis Server."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":45},"end":{"line":46}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":45},"end":{"line":46}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":45},"end":{"line":46}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":45},"end":{"line":47}}},{"$$mdtype":"Node","errors":[],"lines":[47,49],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[47,48],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[47,48],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[47,48],"inline":true,"attributes":{"content":"IsConnected: bool"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":47},"end":{"line":48}}},{"$$mdtype":"Node","errors":[],"lines":[47,48],"inline":true,"attributes":{"content":" -  "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":47},"end":{"line":48}}},{"$$mdtype":"Node","errors":[],"lines":[47,48],"inline":true,"attributes":{"content":"True"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":47},"end":{"line":48}}},{"$$mdtype":"Node","errors":[],"lines":[47,48],"inline":true,"attributes":{"content":" if connected to Redis Server."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":47},"end":{"line":48}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":47},"end":{"line":48}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":47},"end":{"line":48}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":47},"end":{"line":49}}}],"type":"list","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":43},"end":{"line":49}}},{"$$mdtype":"Node","errors":[],"lines":[49,50],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[49,50],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[49,50],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[49,50],"inline":true,"attributes":{"content":"Methods:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":49},"end":{"line":50}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":49},"end":{"line":50}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":49},"end":{"line":50}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":49},"end":{"line":50}}},{"$$mdtype":"Node","errors":[],"lines":[51,52],"inline":false,"attributes":{"level":1},"children":[{"$$mdtype":"Node","errors":[],"lines":[51,52],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[51,52],"inline":true,"attributes":{"href":"#tab/net"},"children":[{"$$mdtype":"Node","errors":[],"lines":[51,52],"inline":true,"attributes":{"content":"NET"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":51},"end":{"line":52}}}],"type":"link","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":51},"end":{"line":52}},"redocly:::linkOriginal:href":"#tab/net"}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":51},"end":{"line":52}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":51},"end":{"line":52}}},{"$$mdtype":"Node","errors":[],"lines":[53,59],"inline":false,"attributes":{"ordered":false,"marker":"*"},"children":[{"$$mdtype":"Node","errors":[],"lines":[53,56],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[53,54],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[53,54],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[53,54],"inline":true,"attributes":{"content":"void Connect(int timeout_msec)"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":53},"end":{"line":54}}},{"$$mdtype":"Node","errors":[],"lines":[53,54],"inline":true,"attributes":{"content":" - Connects to the Redis Server using configuration settings. If the server is not available, it will wait for timeout_msec and then it will try to connect in background. This is possible due to underneath Nuget Package "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":53},"end":{"line":54}}},{"$$mdtype":"Node","errors":[],"lines":[53,54],"inline":true,"attributes":{"href":"https://stackexchange.github.io/StackExchange.Redis/"},"children":[{"$$mdtype":"Node","errors":[],"lines":[53,54],"inline":true,"attributes":{"content":"StackExchange.Redis"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":53},"end":{"line":54}}}],"type":"link","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":53},"end":{"line":54}},"redocly:::linkOriginal:href":"https://stackexchange.github.io/StackExchange.Redis/"},{"$$mdtype":"Node","errors":[],"lines":[53,54],"inline":true,"attributes":{"content":"."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":53},"end":{"line":54}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":53},"end":{"line":54}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":53},"end":{"line":54}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":53},"end":{"line":56}}},{"$$mdtype":"Node","errors":[],"lines":[56,59],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[56,57],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[56,57],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[56,57],"inline":true,"attributes":{"content":"public void Dispose()"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":56},"end":{"line":57}}},{"$$mdtype":"Node","errors":[],"lines":[56,57],"inline":true,"attributes":{"content":" - Cleans up resources required to keep the connection live to the Redis Server. Dispose makes underneath connection closed."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":56},"end":{"line":57}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":56},"end":{"line":57}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":56},"end":{"line":57}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":56},"end":{"line":59}}}],"type":"list","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":53},"end":{"line":59}}},{"$$mdtype":"Node","errors":[],"lines":[59,60],"inline":false,"attributes":{"level":1},"children":[{"$$mdtype":"Node","errors":[],"lines":[59,60],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[59,60],"inline":true,"attributes":{"href":"#tab/python"},"children":[{"$$mdtype":"Node","errors":[],"lines":[59,60],"inline":true,"attributes":{"content":"Python"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":59},"end":{"line":60}}}],"type":"link","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":59},"end":{"line":60}},"redocly:::linkOriginal:href":"#tab/python"}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":59},"end":{"line":60}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":59},"end":{"line":60}}},{"$$mdtype":"Node","errors":[],"lines":[61,65],"inline":false,"attributes":{"ordered":false,"marker":"*"},"children":[{"$$mdtype":"Node","errors":[],"lines":[61,63],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[61,62],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[61,62],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[61,62],"inline":true,"attributes":{"content":"def connect(self, sec: float):"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":61},"end":{"line":62}}},{"$$mdtype":"Node","errors":[],"lines":[61,62],"inline":true,"attributes":{"content":" - Connects to the Redis Server using configuration settings. If the server is not available, it will wait for timeout_msec and then it will try to connect in background. This is possible due to underneath Py Package "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":61},"end":{"line":62}}},{"$$mdtype":"Node","errors":[],"lines":[61,62],"inline":true,"attributes":{"href":"https://pypi.org/project/redis-server/"},"children":[{"$$mdtype":"Node","errors":[],"lines":[61,62],"inline":true,"attributes":{"content":"Redis-Server"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":61},"end":{"line":62}}}],"type":"link","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":61},"end":{"line":62}},"redocly:::linkOriginal:href":"https://pypi.org/project/redis-server/"},{"$$mdtype":"Node","errors":[],"lines":[61,62],"inline":true,"attributes":{"content":"."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":61},"end":{"line":62}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":61},"end":{"line":62}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":61},"end":{"line":62}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":61},"end":{"line":63}}},{"$$mdtype":"Node","errors":[],"lines":[63,65],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[63,64],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[63,64],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[63,64],"inline":true,"attributes":{"content":"def dispose(self):"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":63},"end":{"line":64}}},{"$$mdtype":"Node","errors":[],"lines":[63,64],"inline":true,"attributes":{"content":" - Cleans up resources required to keep the connection live to the Redis Server. Dispose makes underneath connection closed."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":63},"end":{"line":64}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":63},"end":{"line":64}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":63},"end":{"line":64}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":63},"end":{"line":65}}}],"type":"list","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":61},"end":{"line":65}}},{"$$mdtype":"Node","errors":[],"lines":[65,66],"inline":false,"attributes":{},"children":[],"type":"hr","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":65},"end":{"line":66}}},{"$$mdtype":"Node","errors":[],"lines":[67,68],"inline":false,"attributes":{"level":3},"children":[{"$$mdtype":"Node","errors":[],"lines":[67,68],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[67,68],"inline":true,"attributes":{"content":"For Local Development and Testing"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":67},"end":{"line":68}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":67},"end":{"line":68}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":67},"end":{"line":68}}},{"$$mdtype":"Node","errors":[],"lines":[69,70],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[69,70],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[69,70],"inline":true,"attributes":{"content":"To get started with Redis Stack using docker, first you need to select a docker image:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":69},"end":{"line":70}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":69},"end":{"line":70}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":69},"end":{"line":70}}},{"$$mdtype":"Node","errors":[],"lines":[71,73],"inline":false,"attributes":{"ordered":false,"marker":"*"},"children":[{"$$mdtype":"Node","errors":[],"lines":[71,73],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[71,72],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[71,72],"inline":true,"attributes":{"content":"redis/redis-stack"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":71},"end":{"line":72}}},{"$$mdtype":"Node","errors":[],"lines":[71,72],"inline":true,"attributes":{"content":" - contains both Redis Stack server and RedisInsight. This container is best for local development because yu can use the embedded RedisInsight to visualize your data."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":71},"end":{"line":72}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":71},"end":{"line":72}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":71},"end":{"line":73}}}],"type":"list","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":71},"end":{"line":73}}},{"$$mdtype":"Node","errors":[],"lines":[73,74],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[73,74],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[73,74],"inline":true,"attributes":{"content":"To start a Redis Stack container using the Redis Stack image, run the following command in your terminal:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":73},"end":{"line":74}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":73},"end":{"line":74}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":73},"end":{"line":74}}},{"$$mdtype":"Node","errors":[],"lines":[75,78],"inline":false,"attributes":{"content":"docker run -d --name redis-stack -p 6379:6379 -p 8001:8001 redis/redis-stack:latest\n","language":"command"},"children":[{"$$mdtype":"Node","errors":[],"lines":[75,78],"inline":false,"attributes":{"content":"docker run -d --name redis-stack -p 6379:6379 -p 8001:8001 redis/redis-stack:latest\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":75},"end":{"line":78}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":75},"end":{"line":78}}},{"$$mdtype":"Node","errors":[],"lines":[79,80],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[79,80],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[79,80],"inline":true,"attributes":{"content":"Add an "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":79},"end":{"line":80}}},{"$$mdtype":"Node","errors":[],"lines":[79,80],"inline":true,"attributes":{"content":"AEA.json"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":79},"end":{"line":80}}},{"$$mdtype":"Node","errors":[],"lines":[79,80],"inline":true,"attributes":{"content":"file to project with below setting:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":79},"end":{"line":80}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":79},"end":{"line":80}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":79},"end":{"line":80}}},{"$$mdtype":"Node","errors":[],"lines":[82,94],"inline":false,"attributes":{"content":"{\n    \"Name\": \"Sender\",\n    \"AEA2\": {\n       \"LogLevel\": \"Trace\", \n        \"RedisClient\": {\n            \"Server\": \"localhost\",\n            \"Port\": 6379,\n        }\n    }\n}\n","language":"json"},"children":[{"$$mdtype":"Node","errors":[],"lines":[82,94],"inline":false,"attributes":{"content":"{\n    \"Name\": \"Sender\",\n    \"AEA2\": {\n       \"LogLevel\": \"Trace\", \n        \"RedisClient\": {\n            \"Server\": \"localhost\",\n            \"Port\": 6379,\n        }\n    }\n}\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":82},"end":{"line":94}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":82},"end":{"line":94}}},{"$$mdtype":"Node","errors":[],"lines":[94,95],"inline":false,"attributes":{"level":1},"children":[{"$$mdtype":"Node","errors":[],"lines":[94,95],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[94,95],"inline":true,"attributes":{"href":"#tab/net"},"children":[{"$$mdtype":"Node","errors":[],"lines":[94,95],"inline":true,"attributes":{"content":"NET"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":94},"end":{"line":95}}}],"type":"link","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":94},"end":{"line":95}},"redocly:::linkOriginal:href":"#tab/net"}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":94},"end":{"line":95}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":94},"end":{"line":95}}},{"$$mdtype":"Node","errors":[],"lines":[96,97],"inline":false,"attributes":{"level":3},"children":[{"$$mdtype":"Node","errors":[],"lines":[96,97],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[96,97],"inline":true,"attributes":{"content":"Create a Simple Console .NET Application"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":96},"end":{"line":97}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":96},"end":{"line":97}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":96},"end":{"line":97}}},{"$$mdtype":"Node","errors":[],"lines":[98,99],"inline":false,"attributes":{"level":4},"children":[{"$$mdtype":"Node","errors":[],"lines":[98,99],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[98,99],"inline":true,"attributes":{"content":"Programe.cs"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":98},"end":{"line":99}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":98},"end":{"line":99}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":98},"end":{"line":99}}},{"$$mdtype":"Node","errors":[],"lines":[100,117],"inline":false,"attributes":{"content":"using System.Text.Json;\nusing static Agora.SDK;\n\ninternal class Program\n{\n   private static void Main(string[] args)\n    {\n        \"Starting\".LogHeading();\n        Redis.Connect(2000);\n        if (Redis.IsConnected)\n        {\n            var redisValues = Redis.Client?.ListRange(\"Key\");\n        }\n    }\n}\n","language":"csharp"},"children":[{"$$mdtype":"Node","errors":[],"lines":[100,117],"inline":false,"attributes":{"content":"using System.Text.Json;\nusing static Agora.SDK;\n\ninternal class Program\n{\n   private static void Main(string[] args)\n    {\n        \"Starting\".LogHeading();\n        Redis.Connect(2000);\n        if (Redis.IsConnected)\n        {\n            var redisValues = Redis.Client?.ListRange(\"Key\");\n        }\n    }\n}\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":100},"end":{"line":117}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":100},"end":{"line":117}}},{"$$mdtype":"Node","errors":[],"lines":[118,119],"inline":false,"attributes":{"level":1},"children":[{"$$mdtype":"Node","errors":[],"lines":[118,119],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[118,119],"inline":true,"attributes":{"href":"#tab/python"},"children":[{"$$mdtype":"Node","errors":[],"lines":[118,119],"inline":true,"attributes":{"content":"Python"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":118},"end":{"line":119}}}],"type":"link","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":118},"end":{"line":119}},"redocly:::linkOriginal:href":"#tab/python"}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":118},"end":{"line":119}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":118},"end":{"line":119}}},{"$$mdtype":"Node","errors":[],"lines":[120,121],"inline":false,"attributes":{"level":3},"children":[{"$$mdtype":"Node","errors":[],"lines":[120,121],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[120,121],"inline":true,"attributes":{"content":"Create a Simple Console Application in Python"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":120},"end":{"line":121}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":120},"end":{"line":121}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":120},"end":{"line":121}}},{"$$mdtype":"Node","errors":[],"lines":[122,127],"inline":false,"attributes":{"content":"from agoraiot import *\n\nredisclient = redisClientSingleton.connect(2)\n","language":"python"},"children":[{"$$mdtype":"Node","errors":[],"lines":[122,127],"inline":false,"attributes":{"content":"from agoraiot import *\n\nredisclient = redisClientSingleton.connect(2)\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":122},"end":{"line":127}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":122},"end":{"line":127}}},{"$$mdtype":"Node","errors":[],"lines":[127,128],"inline":false,"attributes":{},"children":[],"type":"hr","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":127},"end":{"line":128}}},{"$$mdtype":"Node","errors":[],"lines":[129,130],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[129,130],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[129,130],"inline":true,"attributes":{"content":"On running the app locally, Application should connect and print the below output."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":129},"end":{"line":130}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":129},"end":{"line":130}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":129},"end":{"line":130}}},{"$$mdtype":"Node","errors":[],"lines":[131,132],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[131,132],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[131,132],"inline":true,"attributes":{"alt":"RedisClient","src":"/assets/redisclient.e9bbd7b0b0b8367ac1e6a4dd9b2e68fe510d7b3fdd6a35f5da3e12938ae0e3c8.8e815dff.png"},"children":[],"type":"image","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":131},"end":{"line":132}},"redocly:::linkOriginal:src":"images/RedisClient.png"}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":131},"end":{"line":132}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/redisclienttutorial.md","start":{"line":131},"end":{"line":132}}}],"type":"document","annotations":[],"slots":{}},"solutions/agora/_partials/tutorial/twinproperty.md":{"$$mdtype":"Node","errors":[],"lines":[],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[0,1],"inline":false,"attributes":{"level":2},"children":[{"$$mdtype":"Node","errors":[],"lines":[0,1],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[0,1],"inline":true,"attributes":{"content":"Twin Property Tutorial"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":0},"end":{"line":1}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":0},"end":{"line":1}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":0},"end":{"line":1}}},{"$$mdtype":"Node","errors":[],"lines":[2,3],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[2,3],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[2,3],"inline":true,"attributes":{"content":"This tutorial provides information on how to use the TwinProperty module of SDK to subscribe to changes in Desired properties and write the Reported properties. It uses Redis as the data store. The properties must be associated to a Group Name."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":2},"end":{"line":3}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":2},"end":{"line":3}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":2},"end":{"line":3}}},{"$$mdtype":"Node","errors":[],"lines":[4,5],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[4,5],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[4,5],"inline":true,"attributes":{"content":"This module allows more than 1 Edge application to access the same Group Name and Desired property with Redis acting as the shared repository for information."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":4},"end":{"line":5}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":4},"end":{"line":5}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":4},"end":{"line":5}}},{"$$mdtype":"Node","errors":[],"lines":[6,7],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[6,7],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[6,7],"inline":true,"attributes":{"content":"Namespace: "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":6},"end":{"line":7}}},{"$$mdtype":"Node","errors":[],"lines":[6,7],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[6,7],"inline":true,"attributes":{"content":"Agora.Edge"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":6},"end":{"line":7}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":6},"end":{"line":7}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":6},"end":{"line":7}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":6},"end":{"line":7}}},{"$$mdtype":"Node","errors":[],"lines":[8,9],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[8,9],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[8,9],"inline":true,"attributes":{"content":"A singleton member of Agora.SDK called Twin is used by applications to interact with twin properties."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":8},"end":{"line":9}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":8},"end":{"line":9}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":8},"end":{"line":9}}},{"$$mdtype":"Node","errors":[],"lines":[10,11],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[10,11],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[10,11],"inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","errors":[],"lines":[10,11],"inline":true,"attributes":{"content":"Configuration"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":10},"end":{"line":11}}}],"type":"strong","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":10},"end":{"line":11}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":10},"end":{"line":11}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":10},"end":{"line":11}}},{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[12,13],"inline":true,"attributes":{"content":"The module uses Redis as the data store, hence, has dependency on the SDK's Redis module. The Edge application must have the following configuration in its primary configuration file"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":12},"end":{"line":13}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":12},"end":{"line":13}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":12},"end":{"line":13}}},{"$$mdtype":"Node","errors":[],"lines":[13,23],"inline":false,"attributes":{"content":"{\n    \"AEA2\":{\n        \"RedisClient\": {\n            \"Server\": \"localhost\",\n            \"Port\": 6379,\n        }\n    }\n}\n","language":"json"},"children":[{"$$mdtype":"Node","errors":[],"lines":[13,23],"inline":false,"attributes":{"content":"{\n    \"AEA2\":{\n        \"RedisClient\": {\n            \"Server\": \"localhost\",\n            \"Port\": 6379,\n        }\n    }\n}\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":13},"end":{"line":23}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":13},"end":{"line":23}}},{"$$mdtype":"Node","errors":[],"lines":[23,24],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[23,24],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[23,24],"inline":true,"attributes":{"content":"Additionally, the application should connect to Redis using "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":23},"end":{"line":24}}},{"$$mdtype":"Node","errors":[],"lines":[23,24],"inline":true,"attributes":{"content":"Redis.Connect()"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":23},"end":{"line":24}}},{"$$mdtype":"Node","errors":[],"lines":[23,24],"inline":true,"attributes":{"content":" method."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":23},"end":{"line":24}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":23},"end":{"line":24}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":23},"end":{"line":24}}},{"$$mdtype":"Node","errors":[],"lines":[25,52],"inline":false,"attributes":{"content":"# [NET](#tab/net)\n\n**Properties:**\n\n* `Instance: TwinProperty` - Used to access the singleton instance and is the same as using the Agora.SDK.TwinProperty.\n\n**Event**\n\n* `ChangeEvent` - Used to subscribe/unsubscribe to a Desired property or a Group Name\n\n**Methods:**\n\n* `public bool SetReportedProperty(string propName, string propValue, string tpId)` - Method to set reported property of name `propName` associated to group name `tpId` with value `propValue`. The method uses redis key pattern as mentioned below. :-\n```text\ntwin_properties/{tpId}/reported/{propName}\ntwin_properties/{tpId}/reported/__appname\n```\n\n* `public string GetDesiredProperty(string propName, string tpId)` - Method to read the value of a desired property i.e. `propName` associated to a GroupName `tpId`. The method uses the key pattern as mentioned below.:-\n```text\ntwin_properties/{tpId}/desired/{propName}\n```\n\n* `public string GetReportedProperty(string propName, string tpId)` - Method to read the value of a reported property `propName` assoicated to group name `tpId`. The method uses key pattern as mentioned below:-\n```text\ntwin_properties/{tpId}/reported/{propName}\n```"},"children":[],"type":"comment","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":25},"end":{"line":52}}},{"$$mdtype":"Node","errors":[],"lines":[53,54],"inline":false,"attributes":{"level":1},"children":[{"$$mdtype":"Node","errors":[],"lines":[53,54],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[53,54],"inline":true,"attributes":{"href":"#tab/python"},"children":[{"$$mdtype":"Node","errors":[],"lines":[53,54],"inline":true,"attributes":{"content":"Python"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":53},"end":{"line":54}}}],"type":"link","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":53},"end":{"line":54}},"redocly:::linkOriginal:href":"#tab/python"}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":53},"end":{"line":54}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":53},"end":{"line":54}}},{"$$mdtype":"Node","errors":[],"lines":[55,56],"inline":false,"attributes":{"ordered":false,"marker":"*"},"children":[{"$$mdtype":"Node","errors":[],"lines":[55,56],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[55,56],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[55,56],"inline":true,"attributes":{"content":"def observe(app_callback:Any, tp_group_id:str, property_name:str=None)"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":55},"end":{"line":56}}},{"$$mdtype":"Node","errors":[],"lines":[55,56],"inline":true,"attributes":{"content":" - Method to add observable for "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":55},"end":{"line":56}}},{"$$mdtype":"Node","errors":[],"lines":[55,56],"inline":true,"attributes":{"content":"tp_group_id"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":55},"end":{"line":56}}},{"$$mdtype":"Node","errors":[],"lines":[55,56],"inline":true,"attributes":{"content":" and "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":55},"end":{"line":56}}},{"$$mdtype":"Node","errors":[],"lines":[55,56],"inline":true,"attributes":{"content":"property_name"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":55},"end":{"line":56}}},{"$$mdtype":"Node","errors":[],"lines":[55,56],"inline":true,"attributes":{"content":". If "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":55},"end":{"line":56}}},{"$$mdtype":"Node","errors":[],"lines":[55,56],"inline":true,"attributes":{"content":"property_name"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":55},"end":{"line":56}}},{"$$mdtype":"Node","errors":[],"lines":[55,56],"inline":true,"attributes":{"content":" set to None, observable is set for Redis Key pattern:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":55},"end":{"line":56}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":55},"end":{"line":56}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":55},"end":{"line":56}}}],"type":"list","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":55},"end":{"line":56}}},{"$$mdtype":"Node","errors":[],"lines":[56,59],"inline":false,"attributes":{"content":"twin_properties/{tp_group_id}/desired/*\n","language":"text"},"children":[{"$$mdtype":"Node","errors":[],"lines":[56,59],"inline":false,"attributes":{"content":"twin_properties/{tp_group_id}/desired/*\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":56},"end":{"line":59}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":56},"end":{"line":59}}},{"$$mdtype":"Node","errors":[],"lines":[60,61],"inline":false,"attributes":{"ordered":false,"marker":"*"},"children":[{"$$mdtype":"Node","errors":[],"lines":[60,61],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[60,61],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[60,61],"inline":true,"attributes":{"content":"def stop_observe(tp_group_id:str,property_name:str=None)"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":60},"end":{"line":61}}},{"$$mdtype":"Node","errors":[],"lines":[60,61],"inline":true,"attributes":{"content":" - Method to remove observable for "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":60},"end":{"line":61}}},{"$$mdtype":"Node","errors":[],"lines":[60,61],"inline":true,"attributes":{"content":"tp_group_id"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":60},"end":{"line":61}}},{"$$mdtype":"Node","errors":[],"lines":[60,61],"inline":true,"attributes":{"content":" and "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":60},"end":{"line":61}}},{"$$mdtype":"Node","errors":[],"lines":[60,61],"inline":true,"attributes":{"content":"property_name"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":60},"end":{"line":61}}},{"$$mdtype":"Node","errors":[],"lines":[60,61],"inline":true,"attributes":{"content":" if it exists. If "},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":60},"end":{"line":61}}},{"$$mdtype":"Node","errors":[],"lines":[60,61],"inline":true,"attributes":{"content":"property_name"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":60},"end":{"line":61}}},{"$$mdtype":"Node","errors":[],"lines":[60,61],"inline":true,"attributes":{"content":" set to None, observable is removed for the pattern:"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":60},"end":{"line":61}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":60},"end":{"line":61}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":60},"end":{"line":61}}}],"type":"list","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":60},"end":{"line":61}}},{"$$mdtype":"Node","errors":[],"lines":[61,64],"inline":false,"attributes":{"content":"twin_properties/{tp_group_id}/desired/*\n","language":"text"},"children":[{"$$mdtype":"Node","errors":[],"lines":[61,64],"inline":false,"attributes":{"content":"twin_properties/{tp_group_id}/desired/*\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":61},"end":{"line":64}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":61},"end":{"line":64}}},{"$$mdtype":"Node","errors":[],"lines":[65,66],"inline":false,"attributes":{"ordered":false,"marker":"*"},"children":[{"$$mdtype":"Node","errors":[],"lines":[65,66],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[65,66],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[65,66],"inline":true,"attributes":{"content":"def set_reported_property(prop_name:str, prop_value:any, tp_group_id:str):"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":65},"end":{"line":66}}},{"$$mdtype":"Node","errors":[],"lines":[65,66],"inline":true,"attributes":{"content":" - Method to set reported property. The method uses redis key as mentioned below. :-"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":65},"end":{"line":66}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":65},"end":{"line":66}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":65},"end":{"line":66}}}],"type":"list","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":65},"end":{"line":66}}},{"$$mdtype":"Node","errors":[],"lines":[66,70],"inline":false,"attributes":{"content":"twin_properties/{tp_group_id}/reported/\ntwin_properties/{tp_group_id}/reported/__appname\n","language":"text"},"children":[{"$$mdtype":"Node","errors":[],"lines":[66,70],"inline":false,"attributes":{"content":"twin_properties/{tp_group_id}/reported/\ntwin_properties/{tp_group_id}/reported/__appname\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":66},"end":{"line":70}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":66},"end":{"line":70}}},{"$$mdtype":"Node","errors":[],"lines":[70,71],"inline":false,"attributes":{"ordered":false,"marker":"*"},"children":[{"$$mdtype":"Node","errors":[],"lines":[70,71],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[70,71],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[70,71],"inline":true,"attributes":{"content":"def get_desired_property(prop_name:str, tp_group_id:str):"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":70},"end":{"line":71}}},{"$$mdtype":"Node","errors":[],"lines":[70,71],"inline":true,"attributes":{"content":" - Method to read the value of a desired property i.e. prop_name. The method uses the key pattern as mentioned below. :-"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":70},"end":{"line":71}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":70},"end":{"line":71}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":70},"end":{"line":71}}}],"type":"list","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":70},"end":{"line":71}}},{"$$mdtype":"Node","errors":[],"lines":[71,74],"inline":false,"attributes":{"content":"twin_properties/{tp_group_id}/desired/\n","language":"text"},"children":[{"$$mdtype":"Node","errors":[],"lines":[71,74],"inline":false,"attributes":{"content":"twin_properties/{tp_group_id}/desired/\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":71},"end":{"line":74}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":71},"end":{"line":74}}},{"$$mdtype":"Node","errors":[],"lines":[75,76],"inline":false,"attributes":{"ordered":false,"marker":"*"},"children":[{"$$mdtype":"Node","errors":[],"lines":[75,76],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[75,76],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[75,76],"inline":true,"attributes":{"content":"def get_reported_property(prop_name:str, tp_group_id):"},"children":[],"type":"code","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":75},"end":{"line":76}}},{"$$mdtype":"Node","errors":[],"lines":[75,76],"inline":true,"attributes":{"content":" - Method to read the value of a reported property prop_name. The method uses key pattern as mentioned below:-"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":75},"end":{"line":76}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":75},"end":{"line":76}}}],"type":"item","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":75},"end":{"line":76}}}],"type":"list","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":75},"end":{"line":76}}},{"$$mdtype":"Node","errors":[],"lines":[76,79],"inline":false,"attributes":{"content":"twin_properties/{tp_group_id}/reported/\n","language":"text"},"children":[{"$$mdtype":"Node","errors":[],"lines":[76,79],"inline":false,"attributes":{"content":"twin_properties/{tp_group_id}/reported/\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":76},"end":{"line":79}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":76},"end":{"line":79}}},{"$$mdtype":"Node","errors":[],"lines":[80,81],"inline":false,"attributes":{},"children":[],"type":"hr","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":80},"end":{"line":81}}},{"$$mdtype":"Node","errors":[],"lines":[82,83],"inline":false,"attributes":{"level":3},"children":[{"$$mdtype":"Node","errors":[],"lines":[82,83],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[82,83],"inline":true,"attributes":{"content":"For Local Development and Testing"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":82},"end":{"line":83}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":82},"end":{"line":83}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":82},"end":{"line":83}}},{"$$mdtype":"Node","errors":[],"lines":[84,85],"inline":false,"attributes":{"level":1},"children":[{"$$mdtype":"Node","errors":[],"lines":[84,85],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[84,85],"inline":true,"attributes":{"href":"#tab/net"},"children":[{"$$mdtype":"Node","errors":[],"lines":[84,85],"inline":true,"attributes":{"content":"NET"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":84},"end":{"line":85}}}],"type":"link","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":84},"end":{"line":85}},"redocly:::linkOriginal:href":"#tab/net"}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":84},"end":{"line":85}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":84},"end":{"line":85}}},{"$$mdtype":"Node","errors":[],"lines":[86,87],"inline":false,"attributes":{"level":3},"children":[{"$$mdtype":"Node","errors":[],"lines":[86,87],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[86,87],"inline":true,"attributes":{"content":"Create a Simple Console .NET Application"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":86},"end":{"line":87}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":86},"end":{"line":87}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":86},"end":{"line":87}}},{"$$mdtype":"Node","errors":[],"lines":[88,127],"inline":false,"attributes":{"content":"using System.Text.Json;\nusing static Agora.SDK;\n\nnamespace redis_sdk_project\n{\n    public class Program\n    {\n        public static void appCallback(string groupId, Dictionary<string, string> data)\n        {\n            foreach (var kvp in data)\n            {\n                $\"AppCallback called for group {groupId} and the Key: {kvp.Key}, and Value: {kvp.Value}\\n\".LogInfo();\n            }\n        }\n\n        public static void Main(string[] args)\n        {\n            Redis.Connect(30);\n            var propName = \"TwinPropName\";\n            var tpGroupId = \"Group2\";\n            //Add subscription to all desired properties associated to a GroupName\n            Twin[\"Group1\"].ChangeEvent += appCallback;        \n            //Add subscription to a particular desired property associated to a GroupName\n            Twin[\"Group2\"][propName].ChangeEvent += appCallback2;            \n            //Set reported Property\n            Twin.SetReportedProperty(propName, \"30\", tpGroupId);\n            //Get desired property value\n            $\"Desired Property:{propName}- {Twin.GetDesiredProperty(propName, tpGroupId)}\".LogInfo();\n            //Get reported property\n            $\"Reported Property:{propName}- {Twin.GetReportedProperty(propName, tpGroupId)}\".LogInfo();\n            //Remove subscription\n            Twin[\"Group2\"][propName].ChangeEvent -= appCallback2;\n            Console.ReadLine();\n        }\n    }\n}\n\n","language":"csharp"},"children":[{"$$mdtype":"Node","errors":[],"lines":[88,127],"inline":false,"attributes":{"content":"using System.Text.Json;\nusing static Agora.SDK;\n\nnamespace redis_sdk_project\n{\n    public class Program\n    {\n        public static void appCallback(string groupId, Dictionary<string, string> data)\n        {\n            foreach (var kvp in data)\n            {\n                $\"AppCallback called for group {groupId} and the Key: {kvp.Key}, and Value: {kvp.Value}\\n\".LogInfo();\n            }\n        }\n\n        public static void Main(string[] args)\n        {\n            Redis.Connect(30);\n            var propName = \"TwinPropName\";\n            var tpGroupId = \"Group2\";\n            //Add subscription to all desired properties associated to a GroupName\n            Twin[\"Group1\"].ChangeEvent += appCallback;        \n            //Add subscription to a particular desired property associated to a GroupName\n            Twin[\"Group2\"][propName].ChangeEvent += appCallback2;            \n            //Set reported Property\n            Twin.SetReportedProperty(propName, \"30\", tpGroupId);\n            //Get desired property value\n            $\"Desired Property:{propName}- {Twin.GetDesiredProperty(propName, tpGroupId)}\".LogInfo();\n            //Get reported property\n            $\"Reported Property:{propName}- {Twin.GetReportedProperty(propName, tpGroupId)}\".LogInfo();\n            //Remove subscription\n            Twin[\"Group2\"][propName].ChangeEvent -= appCallback2;\n            Console.ReadLine();\n        }\n    }\n}\n\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":88},"end":{"line":127}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":88},"end":{"line":127}}},{"$$mdtype":"Node","errors":[],"lines":[128,129],"inline":false,"attributes":{"level":1},"children":[{"$$mdtype":"Node","errors":[],"lines":[128,129],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[128,129],"inline":true,"attributes":{"href":"#tab/python"},"children":[{"$$mdtype":"Node","errors":[],"lines":[128,129],"inline":true,"attributes":{"content":"Python"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":128},"end":{"line":129}}}],"type":"link","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":128},"end":{"line":129}},"redocly:::linkOriginal:href":"#tab/python"}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":128},"end":{"line":129}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":128},"end":{"line":129}}},{"$$mdtype":"Node","errors":[],"lines":[130,131],"inline":false,"attributes":{"level":3},"children":[{"$$mdtype":"Node","errors":[],"lines":[130,131],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[130,131],"inline":true,"attributes":{"content":"Create a Simple Console Application in Python"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":130},"end":{"line":131}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":130},"end":{"line":131}}}],"type":"heading","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":130},"end":{"line":131}}},{"$$mdtype":"Node","errors":[],"lines":[132,158],"inline":false,"attributes":{"content":"from agora_twin_property import Twin\nfrom agora_logging import * \n\n\ndef callback(twin:any):\n    logger.info(f\"callback {twin.tp_id}: {twin.key}: {twin.value}\")\n\ndef callback1(twin:any):\n    logger.info(f\"callback 1 {twin.tp_id}: {twin.key} :{twin.value}\")\n    \n#Subscribe to all desired properties under a GroupName\nTwin.observe(callback, \"Group1\")\n#Subscribe to a desired property under a GroupName\nTwin.observe(callback1,\"Group2\",\"TwinPropName\")\n\n# Set reported property \nlogger.info(f\"Set property {Twin.set_reported_property(\"TwinPropName\",30,\"Group1\")}\")\n# Get reported property\nlogger.info(f\"Reported property: TwinPropName- {Twin.get_reported_property(\"TwinPropName\",\"Group1\")}\")\n# Get desired property\nlogger.info(f\"Desired Property: TwinPropName- {Twin.get_desired_property(\"TwinPropName\",\"Group1\")}\")\n#Stop Observable\nTwin.stop_observe(\"Group1\")\n\n","language":"python"},"children":[{"$$mdtype":"Node","errors":[],"lines":[132,158],"inline":false,"attributes":{"content":"from agora_twin_property import Twin\nfrom agora_logging import * \n\n\ndef callback(twin:any):\n    logger.info(f\"callback {twin.tp_id}: {twin.key}: {twin.value}\")\n\ndef callback1(twin:any):\n    logger.info(f\"callback 1 {twin.tp_id}: {twin.key} :{twin.value}\")\n    \n#Subscribe to all desired properties under a GroupName\nTwin.observe(callback, \"Group1\")\n#Subscribe to a desired property under a GroupName\nTwin.observe(callback1,\"Group2\",\"TwinPropName\")\n\n# Set reported property \nlogger.info(f\"Set property {Twin.set_reported_property(\"TwinPropName\",30,\"Group1\")}\")\n# Get reported property\nlogger.info(f\"Reported property: TwinPropName- {Twin.get_reported_property(\"TwinPropName\",\"Group1\")}\")\n# Get desired property\nlogger.info(f\"Desired Property: TwinPropName- {Twin.get_desired_property(\"TwinPropName\",\"Group1\")}\")\n#Stop Observable\nTwin.stop_observe(\"Group1\")\n\n"},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":132},"end":{"line":158}}}],"type":"fence","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":132},"end":{"line":158}}},{"$$mdtype":"Node","errors":[],"lines":[158,159],"inline":false,"attributes":{},"children":[],"type":"hr","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":158},"end":{"line":159}}},{"$$mdtype":"Node","errors":[],"lines":[160,161],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[160,161],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[160,161],"inline":true,"attributes":{"content":"On running the application locally, application should connect and print the below output."},"children":[],"type":"text","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":160},"end":{"line":161}}}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":160},"end":{"line":161}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":160},"end":{"line":161}}},{"$$mdtype":"Node","errors":[],"lines":[162,163],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[162,163],"inline":false,"attributes":{},"children":[{"$$mdtype":"Node","errors":[],"lines":[162,163],"inline":true,"attributes":{"alt":"TwinProperty","src":"/assets/twinpropertysharp.c51c1c249b8e9a5edba22723663791df85334d963b7da8500237e2efd3c69b7f.8e815dff.png"},"children":[],"type":"image","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":162},"end":{"line":163}},"redocly:::linkOriginal:src":"images/TwinPropertySharp.png"}],"type":"inline","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":162},"end":{"line":163}}}],"type":"paragraph","annotations":[],"slots":{},"location":{"file":"solutions/agora/_partials/tutorial/twinproperty.md","start":{"line":162},"end":{"line":163}}}],"type":"document","annotations":[],"slots":{}}},"variables":{"rbac":{"teams":["anonymous"]},"user":{},"remoteAddr":{"hostname":"developer.slb.com","port":4000,"ipAddress":"216.73.216.131"},"lang":"default_locale","env":{"PUBLIC_ANALYTICS_ID":"G-WLFGNSLNEV","PUBLIC_REDOCLY_BRANCH_NAME":"main"}}},"pagePropGetterError":{"message":"","name":""}},"slug":"/solutions/fdplan/apis/fdplan-evaluation","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}