Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
 internal ServiceType(
     ServiceTypeDescription serviceTypeDescription,
     string serviceManifestVersion,
     string serviceManifestName,
     bool isServiceGroup = false)
 {
     this.ServiceTypeDescription = serviceTypeDescription;
     this.ServiceManifestVersion = serviceManifestVersion;
     this.ServiceManifestName    = serviceManifestName;
     this.IsServiceGroup         = isServiceGroup;
 }
Ejemplo n.º 4
0
        /// <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.");
            }
        }
Ejemplo n.º 5
0
        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);
        }