internal IntPtr ToNative(PinCollection pinCollection)
        {
            var nativeDescription = new NativeTypes.FABRIC_APPLICATION_DESCRIPTION();

            nativeDescription.ApplicationName        = pinCollection.AddObject(this.ApplicationName);
            nativeDescription.ApplicationTypeName    = pinCollection.AddObject(this.ApplicationTypeName);
            nativeDescription.ApplicationTypeVersion = pinCollection.AddObject(this.ApplicationTypeVersion);

            if (this.ApplicationParameters.Count != 0)
            {
                var applicationParameterList = new ApplicationParameterList(this.ApplicationParameters);
                nativeDescription.ApplicationParameters = applicationParameterList.ToNative(pinCollection);
            }
            else
            {
                nativeDescription.ApplicationParameters = IntPtr.Zero;
            }

            if (this.MaximumNodes > 0 || this.MinimumNodes > 0 || this.Metrics != null)
            {
                var nativeDescriptionEx1 = new NativeTypes.FABRIC_APPLICATION_DESCRIPTION_EX1();
                var nativeApplicationCapacityDescription = new NativeTypes.FABRIC_APPLICATION_CAPACITY_DESCRIPTION();
                nativeApplicationCapacityDescription.MaximumNodes = checked ((uint)this.MaximumNodes);
                nativeApplicationCapacityDescription.MinimumNodes = checked ((uint)this.MinimumNodes);

                var nativeMetricsList = new NativeTypes.FABRIC_APPLICATION_METRIC_LIST();
                if (null != this.Metrics)
                {
                    nativeMetricsList.Count = (uint)this.Metrics.Count;
                    if (this.Metrics.Count > 0)
                    {
                        var nativeMetricsArray = new NativeTypes.FABRIC_APPLICATION_METRIC_DESCRIPTION[this.Metrics.Count];
                        for (int i = 0; i < this.Metrics.Count; i++)
                        {
                            Metrics[i].ToNative(pinCollection, ref nativeMetricsArray[i]);
                        }

                        nativeMetricsList.Metrics = pinCollection.AddBlittable(nativeMetricsArray);
                    }
                    else
                    {
                        nativeMetricsList.Metrics = IntPtr.Zero;
                    }
                }
                else
                {
                    nativeMetricsList.Count   = 0;
                    nativeMetricsList.Metrics = IntPtr.Zero;
                }
                nativeApplicationCapacityDescription.Metrics = pinCollection.AddBlittable(nativeMetricsList);

                nativeDescriptionEx1.ApplicationCapacity = pinCollection.AddBlittable(nativeApplicationCapacityDescription);

                nativeDescription.Reserved = pinCollection.AddBlittable(nativeDescriptionEx1);
            }

            return(pinCollection.AddBlittable(nativeDescription));
        }
Пример #2
0
 internal void ToNative(PinCollection pinCollection, ref NativeTypes.FABRIC_APPLICATION_METRIC_DESCRIPTION nativeDescription)
 {
     nativeDescription.Name = pinCollection.AddObject(this.Name);
     // Validation makes sure that these values are >= 0
     nativeDescription.NodeReservationCapacity = checked((uint)this.NodeReservationCapacity);
     nativeDescription.MaximumNodeCapacity = checked((uint)this.MaximumNodeCapacity);
     nativeDescription.TotalApplicationCapacity = checked((uint)this.TotalApplicationCapacity);
     nativeDescription.Reserved = IntPtr.Zero;
 }
Пример #3
0
 internal static ApplicationMetricDescription CreateFromNative(NativeTypes.FABRIC_APPLICATION_METRIC_DESCRIPTION nativeDescription)
 {
     return new ApplicationMetricDescription()
     {
         Name = NativeTypes.FromNativeString(nativeDescription.Name),
         NodeReservationCapacity = checked((long)nativeDescription.NodeReservationCapacity),
         MaximumNodeCapacity = checked((long)nativeDescription.MaximumNodeCapacity),
         TotalApplicationCapacity = checked((long)nativeDescription.TotalApplicationCapacity)
     };
 }
        internal IntPtr ToNative(PinCollection pinCollection)
        {
            var nativeDescription = new NativeTypes.FABRIC_APPLICATION_UPDATE_DESCRIPTION();

            var flags = NativeTypes.FABRIC_APPLICATION_UPDATE_DESCRIPTION_FLAGS.FABRIC_APPLICATION_UPDATE_DESCRIPTION_FLAGS_NONE;

            nativeDescription.ApplicationName           = pinCollection.AddObject(this.ApplicationName);
            nativeDescription.RemoveApplicationCapacity = NativeTypes.ToBOOLEAN(RemoveApplicationCapacity);

            if (this.MinimumNodes.HasValue)
            {
                flags = flags | NativeTypes.FABRIC_APPLICATION_UPDATE_DESCRIPTION_FLAGS.FABRIC_APPLICATION_UPDATE_DESCRIPTION_FLAGS_MINNODES;
                nativeDescription.MinimumNodes = checked ((uint)this.MinimumNodes.Value);
            }

            if (this.MaximumNodes.HasValue)
            {
                flags = flags | NativeTypes.FABRIC_APPLICATION_UPDATE_DESCRIPTION_FLAGS.FABRIC_APPLICATION_UPDATE_DESCRIPTION_FLAGS_MAXNODES;
                nativeDescription.MaximumNodes = checked ((uint)this.MaximumNodes.Value);
            }

            if (this.Metrics != null)
            {
                flags = flags | NativeTypes.FABRIC_APPLICATION_UPDATE_DESCRIPTION_FLAGS.FABRIC_APPLICATION_UPDATE_DESCRIPTION_FLAGS_METRICS;
                var nativeMetricsList = new NativeTypes.FABRIC_APPLICATION_METRIC_LIST();
                nativeMetricsList.Count = (uint)this.Metrics.Count;
                if (this.Metrics.Count > 0)
                {
                    var nativeMetricsArray = new NativeTypes.FABRIC_APPLICATION_METRIC_DESCRIPTION[this.Metrics.Count];
                    for (int i = 0; i < this.Metrics.Count; i++)
                    {
                        Metrics[i].ToNative(pinCollection, ref nativeMetricsArray[i]);
                    }

                    nativeMetricsList.Metrics = pinCollection.AddBlittable(nativeMetricsArray);
                }
                nativeDescription.Metrics = pinCollection.AddBlittable(nativeMetricsList);
            }

            nativeDescription.Flags = (uint)flags;

            return(pinCollection.AddBlittable(nativeDescription));
        }