/// <summary> /// Gets the object from Json properties. /// </summary> /// <param name="reader">The <see cref="T: Newtonsoft.Json.JsonReader" /> to read from.</param> /// <returns>The object Value.</returns> internal static ServiceTypeDescription GetFromJsonProperties(JsonReader reader) { ServiceTypeDescription obj = null; var propName = reader.ReadPropertyName(); if (!propName.Equals("Kind", StringComparison.OrdinalIgnoreCase)) { throw new JsonReaderException($"Incorrect discriminator property name {propName}, Expected discriminator property name is Kind."); } var propValue = reader.ReadValueAsString(); if (propValue.Equals("Stateful", StringComparison.OrdinalIgnoreCase)) { obj = StatefulServiceTypeDescriptionConverter.GetFromJsonProperties(reader); } else if (propValue.Equals("Stateless", StringComparison.OrdinalIgnoreCase)) { obj = StatelessServiceTypeDescriptionConverter.GetFromJsonProperties(reader); } else { throw new InvalidOperationException("Unknown Kind."); } return(obj); }
internal static unsafe ServiceType CreateFromNative( NativeTypes.FABRIC_SERVICE_TYPE_QUERY_RESULT_ITEM nativeResultItem) { ServiceTypeDescription serviceTypeDescription; if (ServiceTypeDescription.TryCreateFromNative(nativeResultItem.ServiceTypeDescription, out serviceTypeDescription)) { string serviceManifestName = null; bool isServiceGroup = false; if (nativeResultItem.Reserved != IntPtr.Zero) { var castedEx1 = (NativeTypes.FABRIC_SERVICE_TYPE_QUERY_RESULT_ITEM_EX1 *)(nativeResultItem.Reserved); serviceManifestName = NativeTypes.FromNativeString(castedEx1->ServiceManifestName); if (castedEx1->Reserved != IntPtr.Zero) { var castedEx2 = (NativeTypes.FABRIC_SERVICE_TYPE_QUERY_RESULT_ITEM_EX2 *)(castedEx1->Reserved); isServiceGroup = NativeTypes.FromBOOLEAN(castedEx2->IsServiceGroup); } } return(new ServiceType( serviceTypeDescription, NativeTypes.FromNativeString(nativeResultItem.ServiceManifestVersion), serviceManifestName, isServiceGroup)); } else { return(null); } }
internal ServiceType( ServiceTypeDescription serviceTypeDescription, string serviceManifestVersion, string serviceManifestName, bool isServiceGroup = false) { this.ServiceTypeDescription = serviceTypeDescription; this.ServiceManifestVersion = serviceManifestVersion; this.ServiceManifestName = serviceManifestName; this.IsServiceGroup = isServiceGroup; }
/// <summary> /// Serializes the object to JSON. /// </summary> /// <param name="writer">The <see cref="T: Newtonsoft.Json.JsonWriter" /> to write to.</param> /// <param name="obj">The object to serialize to JSON.</param> internal static void Serialize(JsonWriter writer, ServiceTypeDescription obj) { var kind = obj.Kind; if (kind.Equals(ServiceKind.Stateful)) { StatefulServiceTypeDescriptionConverter.Serialize(writer, (StatefulServiceTypeDescription)obj); } else if (kind.Equals(ServiceKind.Stateless)) { StatelessServiceTypeDescriptionConverter.Serialize(writer, (StatelessServiceTypeDescription)obj); } else { throw new InvalidOperationException("Unknown Kind."); } }
internal static unsafe ServiceManifest CreateFromNative(NativeRuntime.IFabricCodePackageActivationContext nativeContext) { ServiceManifest manifest = new ServiceManifest(); var nativeServiceTypes = (NativeTypes.FABRIC_SERVICE_TYPE_DESCRIPTION_LIST *)nativeContext.get_ServiceTypes(); if (nativeServiceTypes != null) { for (int i = 0; i < nativeServiceTypes->Count; i++) { manifest.ServiceTypeDescriptions.Add(ServiceTypeDescription.CreateFromNative(nativeServiceTypes->Items + i * Marshal.SizeOf(typeof(NativeTypes.FABRIC_SERVICE_TYPE_DESCRIPTION)))); } } var nativeServiceGroupTypes = (NativeTypes.FABRIC_SERVICE_GROUP_TYPE_DESCRIPTION_LIST *)nativeContext.get_ServiceGroupTypes(); if (nativeServiceGroupTypes != null) { for (int i = 0; i < nativeServiceGroupTypes->Count; i++) { manifest.ServiceGroupTypeDescriptions.Add(ServiceGroupTypeDescription.CreateFromNative(nativeServiceGroupTypes->Items + i * Marshal.SizeOf(typeof(NativeTypes.FABRIC_SERVICE_GROUP_TYPE_DESCRIPTION)))); } } ServiceManifest.ParseCodePackages(nativeContext, manifest); ServiceManifest.ParseConfigurationPackages(nativeContext, manifest); ServiceManifest.ParseDataPackages(nativeContext, manifest); ServiceManifest.ParseEndPoints(nativeContext, manifest); ReleaseAssert.AssertIfNot(manifest.CodePackages.Count > 0, "There should be at least one code package"); manifest.Name = manifest.CodePackages[0].Description.ServiceManifestName; manifest.Version = manifest.CodePackages[0].Description.ServiceManifestVersion; GC.KeepAlive(nativeContext); return(manifest); }