/// <summary>
 /// Convert twin to module
 /// </summary>
 /// <param name="twin"></param>
 /// <returns></returns>
 public static Module ToModule(this DeviceTwinModel twin)
 {
     return(new Module(twin.Id, twin.ModuleId)
     {
         ManagedBy = twin.Id
     });
 }
 /// <summary>
 /// Clone twin
 /// </summary>
 /// <param name="model"></param>
 /// <returns></returns>
 public static DeviceTwinModel Clone(this DeviceTwinModel model)
 {
     if (model == null)
     {
         return(null);
     }
     return(new DeviceTwinModel {
         Capabilities = model.Capabilities == null ? null :
                        new DeviceCapabilitiesModel {
             IotEdge = model.Capabilities.IotEdge
         },
         ConnectionState = model.ConnectionState,
         Etag = model.Etag,
         Id = model.Id,
         LastActivityTime = model.LastActivityTime,
         ModuleId = model.ModuleId,
         Properties = model.Properties.Clone(),
         Status = model.Status,
         StatusReason = model.StatusReason,
         StatusUpdatedTime = model.StatusUpdatedTime,
         Tags = model.Tags?
                .ToDictionary(kv => kv.Key, kv => kv.Value?.DeepClone()),
         Version = model.Version
     });
 }
 /// <summary>
 /// Convert twin to device
 /// </summary>
 /// <param name="twin"></param>
 /// <returns></returns>
 public static Device ToDevice(this DeviceTwinModel twin)
 {
     return(new Device(twin.Id)
     {
         Capabilities = twin.Capabilities?.ToCapabilities()
     });
 }
 /// <summary>
 /// Convert twin to device
 /// </summary>
 /// <param name="twin"></param>
 /// <returns></returns>
 public static Device ToDevice(this DeviceTwinModel twin)
 {
     if (twin == null)
     {
         return(null);
     }
     return(new Device(twin.Id)
     {
         Capabilities = twin.Capabilities?.ToCapabilities(),
         Scope = twin.DeviceScope
     });
 }
 /// <summary>
 /// Convert twin to twin
 /// </summary>
 /// <param name="twin"></param>
 /// <param name="isPatch"></param>
 /// <returns></returns>
 public static Twin ToTwin(this DeviceTwinModel twin, bool isPatch = false)
 {
     return(new Twin(twin.Id)
     {
         ETag = twin.Etag,
         ModuleId = twin.ModuleId,
         DeviceId = twin.Id,
         Tags = twin.Tags?.ToTwinCollection(),
         Capabilities = null, // r/o
         Version = null,      // r/o
         Properties = new TwinProperties {
             Desired =
                 twin.Properties?.Desired?.ToTwinCollection(),
             Reported = isPatch ? null :
                        twin.Properties?.Reported?.ToTwinCollection()
         }
     });
 }
        /// <summary>
        /// Consolidated
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public static Dictionary <string, JToken> GetConsolidatedProperties(
            this DeviceTwinModel model)
        {
            var desired  = model.Properties?.Desired;
            var reported = model.Properties?.Reported;

            if (reported == null || desired == null)
            {
                return((reported ?? desired) ??
                       new Dictionary <string, JToken>());
            }

            var properties = new Dictionary <string, JToken>(desired);

            // Merge with reported
            foreach (var prop in reported)
            {
                if (properties.TryGetValue(prop.Key, out var existing))
                {
                    if (existing == null || prop.Value == null)
                    {
                        if (existing == prop.Value)
                        {
                            continue;
                        }
                    }
                    else if (JToken.DeepEquals(existing, prop.Value))
                    {
                        continue;
                    }
                    properties[prop.Key] = prop.Value;
                }
                else
                {
                    properties.Add(prop.Key, prop.Value);
                }
            }
            return(properties);
        }
 /// <summary>
 /// Check whether twin is disabled
 /// </summary>
 /// <param name="twin"></param>
 /// <returns></returns>
 public static bool?IsDisabled(this DeviceTwinModel twin) =>
 twin.Status?.EqualsIgnoreCase("disabled");
 /// <summary>
 /// Check whether twin is connected
 /// </summary>
 /// <param name="twin"></param>
 /// <returns></returns>
 public static bool?IsConnected(this DeviceTwinModel twin) =>
 twin.ConnectionState?.EqualsIgnoreCase("connected");
 /// <summary>
 /// Check whether twin is enabled
 /// </summary>
 /// <param name="twin"></param>
 /// <returns></returns>
 public static bool?IsEnabled(this DeviceTwinModel twin)
 {
     return(twin.Status?.EqualsIgnoreCase("enabled"));
 }
示例#10
0
 /// <summary>
 /// Check whether twin is connected
 /// </summary>
 /// <param name="twin"></param>
 /// <returns></returns>
 public static bool?IsConnected(this DeviceTwinModel twin)
 {
     return(twin.ConnectionState?.EqualsIgnoreCase("Connected"));
 }