예제 #1
0
        internal override async Task <TT> PublishTwinAsync <TT>(string name, TT typeTwin)
        {
            var twin    = typeTwin.GetTwin();
            var newTwin = await _registryManager.UpdateTwinAsync(_deviceId, Name, twin, twin.ETag);

            return(TypeTwin.CreateTwin <TT>(name, newTwin));
        }
예제 #2
0
        internal virtual async Task <T> GetTwinAsync <T>(string name)
            where T : TypeTwin, new()
        {
            var twin = await _ioTHubModuleClient.GetTwinAsync();

            return(TypeTwin.CreateTwin <T>(name, twin));
        }
예제 #3
0
        internal override async Task <TT> GetTwinAsync <TT>(string name)
        {
            var twin = await _registryManager.GetTwinAsync(_deviceId, Name);

            var typeTwin = TypeTwin.CreateTwin <TT>(name, twin);

            return(typeTwin);
        }
예제 #4
0
        private async Task PropertyHandler(TwinCollection desiredProperties, object userContext)
        {
            Logger.LogInformation("PropertyHandler called");

            if (!(userContext is Dictionary <string, SubscriptionCallback> callbacks))
            {
                throw new InvalidOperationException("UserContext doesn't contain a valid SubscriptionCallback");
            }

            Logger.LogInformation("Desired property change:");
            Logger.LogInformation(JsonConvert.SerializeObject(desiredProperties));

            foreach (var callback in callbacks)
            {
                if (desiredProperties.Contains($"___{callback.Key}"))
                {
                    var input = TypeTwin.CreateTwin(callback.Value.Type, callback.Key, desiredProperties);

                    var invocationResult = callback.Value.Handler.DynamicInvoke(input);
                    await(Task <TwinResult>) invocationResult;
                }
            }
        }