/// <summary> /// <para>Reads the properties of the service type.</para> /// </summary> /// <param name="serviceTypeName"> /// <para>The name of the service type.</para> /// </param> /// <param name="placementConstraints"> /// <para>The constraints to be used.</para> /// </param> /// <param name="loadMetricsList"> /// <para>The type of load metric.</para> /// </param> /// <param name="descriptionExtensionList"> /// <para>The description extension list.</para> /// </param> protected internal unsafe void ReadCommonProperties( IntPtr serviceTypeName, IntPtr placementConstraints, IntPtr loadMetricsList, IntPtr descriptionExtensionList) { this.ServiceTypeName = NativeTypes.FromNativeString(serviceTypeName); this.PlacementConstraints = NativeTypes.FromNativeString(placementConstraints); AppTrace.TraceSource.WriteNoise("ServiceTypeDescription.ReadCommonProperties", "Type {0}", this.ServiceTypeName); bool isStateful = (this.ServiceTypeKind == ServiceDescriptionKind.Stateful); if (loadMetricsList != IntPtr.Zero) { NativeTypes.FABRIC_SERVICE_LOAD_METRIC_DESCRIPTION_LIST *nativeMetrics = (NativeTypes.FABRIC_SERVICE_LOAD_METRIC_DESCRIPTION_LIST *)loadMetricsList; for (int i = 0; i < nativeMetrics->Count; i++) { this.loadMetrics.Add(ServiceLoadMetricDescription.CreateFromNative(nativeMetrics->Items + (i * Marshal.SizeOf(typeof(NativeTypes.FABRIC_SERVICE_LOAD_METRIC_DESCRIPTION))), isStateful)); } } if (descriptionExtensionList != IntPtr.Zero) { NativeTypes.FABRIC_SERVICE_TYPE_DESCRIPTION_EXTENSION_LIST *nativeDescriptions = (NativeTypes.FABRIC_SERVICE_TYPE_DESCRIPTION_EXTENSION_LIST *)descriptionExtensionList; for (int i = 0; i < nativeDescriptions->Count; i++) { Tuple <string, string> extension = DescriptionExtension.CreateFromNative(nativeDescriptions->Items + (i * Marshal.SizeOf(typeof(NativeTypes.FABRIC_SERVICE_TYPE_DESCRIPTION_EXTENSION)))); this.extensions.Add(extension.Item1, extension.Item2); } } }
internal static unsafe ServiceGroupTypeMemberDescription CreateFromNative(IntPtr descriptionPtr, bool isStateful) { NativeTypes.FABRIC_SERVICE_GROUP_TYPE_MEMBER_DESCRIPTION *nativeDescription = (NativeTypes.FABRIC_SERVICE_GROUP_TYPE_MEMBER_DESCRIPTION *)descriptionPtr; ServiceGroupTypeMemberDescription description = new ServiceGroupTypeMemberDescription() { ServiceTypeName = NativeTypes.FromNativeString(nativeDescription->ServiceTypeName) }; NativeTypes.FABRIC_SERVICE_LOAD_METRIC_DESCRIPTION_LIST *nativeMetrics = (NativeTypes.FABRIC_SERVICE_LOAD_METRIC_DESCRIPTION_LIST *)nativeDescription->LoadMetrics; if (nativeMetrics != null && nativeMetrics->Count > 0) { for (int i = 0; i < nativeMetrics->Count; ++i) { description.loadMetrics.Add(ServiceLoadMetricDescription.CreateFromNative(nativeMetrics->Items + (i * Marshal.SizeOf(typeof(NativeTypes.FABRIC_SERVICE_LOAD_METRIC_DESCRIPTION))), isStateful)); } } return(description); }