예제 #1
0
        internal static unsafe DeployedStatelessServiceInstance FromNative(NativeTypes.FABRIC_DEPLOYED_STATELESS_SERVICE_INSTANCE_QUERY_RESULT_ITEM nativeObj)
        {
            var  serviceManifestName        = string.Empty;
            var  servicePackageActivationId = string.Empty;
            long hostProcessId = 0;

            if (nativeObj.Reserved != IntPtr.Zero)
            {
                var extended = (NativeTypes.FABRIC_DEPLOYED_STATELESS_SERVICE_INSTANCE_QUERY_RESULT_ITEM_EX1 *)nativeObj.Reserved;
                serviceManifestName = NativeTypes.FromNativeString(extended->ServiceManifestName);

                if (extended->Reserved != IntPtr.Zero)
                {
                    var nativeResultItemEx2 =
                        (NativeTypes.FABRIC_DEPLOYED_STATELESS_SERVICE_INSTANCE_QUERY_RESULT_ITEM_EX2 *)extended->Reserved;

                    servicePackageActivationId = NativeTypes.FromNativeString(nativeResultItemEx2->ServicePackageActivationId);

                    if (nativeResultItemEx2->Reserved != IntPtr.Zero)
                    {
                        var extended3 = (NativeTypes.FABRIC_DEPLOYED_STATELESS_SERVICE_INSTANCE_QUERY_RESULT_ITEM_EX3 *)nativeResultItemEx2->Reserved;
                        hostProcessId = extended3->HostProcessId;
                    }
                }
            }

            return(new DeployedStatelessServiceInstance
            {
                ServiceName = new Uri(NativeTypes.FromNativeString(nativeObj.ServiceName)),
                ServiceTypeName = NativeTypes.FromNativeString(nativeObj.ServiceTypeName),
                ServiceManifestName = serviceManifestName,
                ServicePackageActivationId = servicePackageActivationId,
                CodePackageName = NativeTypes.FromNativeString(nativeObj.CodePackageName),
                Partitionid = nativeObj.PartitionId,
                ReplicaStatus = (ServiceReplicaStatus)nativeObj.ReplicaStatus,
                Address = NativeTypes.FromNativeString(nativeObj.Address),
                InstanceId = nativeObj.InstanceId,
                ServiceManifestVersion_ = NativeTypes.FromNativeString(nativeObj.ServiceManifestVersion),
                HostProcessId = hostProcessId,
            });
        }
#pragma warning restore 0618

        internal static unsafe DeployedServiceReplica CreateFromNative(
            NativeTypes.FABRIC_DEPLOYED_SERVICE_REPLICA_QUERY_RESULT_ITEM nativeResultItem)
        {
            if ((ServiceKind)nativeResultItem.Kind == ServiceKind.Stateless)
            {
                NativeTypes.FABRIC_DEPLOYED_STATELESS_SERVICE_INSTANCE_QUERY_RESULT_ITEM nativeStatelessInstanceQueryResult =
                    *(NativeTypes.FABRIC_DEPLOYED_STATELESS_SERVICE_INSTANCE_QUERY_RESULT_ITEM *)nativeResultItem.Value;
                return(DeployedStatelessServiceInstance.FromNative(nativeStatelessInstanceQueryResult));
            }
            else if ((ServiceKind)nativeResultItem.Kind == ServiceKind.Stateful)
            {
                NativeTypes.FABRIC_DEPLOYED_STATEFUL_SERVICE_REPLICA_QUERY_RESULT_ITEM nativeStatefulServiceQueryResult =
                    *(NativeTypes.FABRIC_DEPLOYED_STATEFUL_SERVICE_REPLICA_QUERY_RESULT_ITEM *)nativeResultItem.Value;
                return(DeployedStatefulServiceReplica.FromNative(nativeStatefulServiceQueryResult));
            }
            else
            {
                AppTrace.TraceSource.WriteNoise(
                    "DeployedServiceReplica.CreateFromNative",
                    "Ignoring the result with unsupported ServiceKind value {0}",
                    (int)nativeResultItem.Kind);
                return(null);
            }
        }