コード例 #1
0
        public static GrainReference FromKeyString(string key)
        {
            if (string.IsNullOrWhiteSpace(key))
            {
                throw new ArgumentNullException("key", "GrainReference.FromKeyString cannot parse null key");
            }

            string trimmed = key.Trim();
            string grainIdStr;
            int    grainIdIndex = (GRAIN_REFERENCE_STR + "=").Length;

            int genericIndex      = trimmed.IndexOf(GENERIC_ARGUMENTS_STR + "=", StringComparison.Ordinal);
            int observerIndex     = trimmed.IndexOf(OBSERVER_ID_STR + "=", StringComparison.Ordinal);
            int systemTargetIndex = trimmed.IndexOf(SYSTEM_TARGET_STR + "=", StringComparison.Ordinal);

            if (genericIndex >= 0)
            {
                grainIdStr = trimmed.Substring(grainIdIndex, genericIndex - grainIdIndex).Trim();
                string genericStr = trimmed.Substring(genericIndex + (GENERIC_ARGUMENTS_STR + "=").Length);
                if (String.IsNullOrEmpty(genericStr))
                {
                    genericStr = null;
                }
                return(FromGrainId(GrainId.FromParsableString(grainIdStr), genericStr));
            }
            else if (observerIndex >= 0)
            {
                grainIdStr = trimmed.Substring(grainIdIndex, observerIndex - grainIdIndex).Trim();
                string observerIdStr = trimmed.Substring(observerIndex + (OBSERVER_ID_STR + "=").Length);
                GuidId observerId    = GuidId.FromParsableString(observerIdStr);
                return(NewObserverGrainReference(GrainId.FromParsableString(grainIdStr), observerId));
            }
            else if (systemTargetIndex >= 0)
            {
                grainIdStr = trimmed.Substring(grainIdIndex, systemTargetIndex - grainIdIndex).Trim();
                string      systemTargetStr = trimmed.Substring(systemTargetIndex + (SYSTEM_TARGET_STR + "=").Length);
                SiloAddress siloAddress     = SiloAddress.FromParsableString(systemTargetStr);
                return(FromGrainId(GrainId.FromParsableString(grainIdStr), null, siloAddress));
            }
            else
            {
                grainIdStr = trimmed.Substring(grainIdIndex);
                return(FromGrainId(GrainId.FromParsableString(grainIdStr)));
            }
            //return FromGrainId(GrainId.FromParsableString(grainIdStr), generic);
        }
コード例 #2
0
ファイル: GrainReference.cs プロジェクト: tcunning/orleans
        // The special constructor is used to deserialize values.
        protected GrainReference(SerializationInfo info, StreamingContext context)
        {
            // Reset the property value using the GetValue method.
            var grainIdStr = info.GetString("GrainId");

            GrainId = GrainId.FromParsableString(grainIdStr);
            if (GrainId.IsSystemTarget)
            {
                var siloAddressStr = info.GetString("SystemTargetSilo");
                SystemTargetSilo = SiloAddress.FromParsableString(siloAddressStr);
            }
            var genericArg = info.GetString("GenericArguments");

            if (String.IsNullOrEmpty(genericArg))
            {
                genericArg = null;
            }
            genericArguments = genericArg;
        }
コード例 #3
0
        internal static GrainReference FromKeyString(string key, IGrainReferenceRuntime runtime)
        {
            if (string.IsNullOrWhiteSpace(key))
            {
                throw new ArgumentNullException(nameof(key), "GrainReference.FromKeyString cannot parse null key");
            }

            ReadOnlySpan <char> trimmed = key.AsSpan().Trim();
            ReadOnlySpan <char> grainIdStr;
            int grainIdIndex = (GRAIN_REFERENCE_STR + "=").Length;

            int genericIndex      = trimmed.IndexOf(GENERIC_ARGUMENTS_STR_WITH_EQUAL_SIGN.AsSpan(), StringComparison.Ordinal);
            int observerIndex     = trimmed.IndexOf(OBSERVER_ID_STR_WITH_EQUAL_SIGN.AsSpan(), StringComparison.Ordinal);
            int systemTargetIndex = trimmed.IndexOf(SYSTEM_TARGET_STR_WITH_EQUAL_SIGN.AsSpan(), StringComparison.Ordinal);

            if (genericIndex >= 0)
            {
                grainIdStr = trimmed.Slice(grainIdIndex, genericIndex - grainIdIndex).Trim();
                ReadOnlySpan <char> genericStr = trimmed.Slice(genericIndex + GENERIC_ARGUMENTS_STR_WITH_EQUAL_SIGN.Length);
                return(FromGrainId(GrainId.FromParsableString(grainIdStr), runtime, genericStr.ToString()));
            }
            else if (observerIndex >= 0)
            {
                grainIdStr = trimmed.Slice(grainIdIndex, observerIndex - grainIdIndex).Trim();
                ReadOnlySpan <char> observerIdStr = trimmed.Slice(observerIndex + OBSERVER_ID_STR_WITH_EQUAL_SIGN.Length);
                GuidId observerId = GuidId.FromParsableString(observerIdStr.ToString());
                return(NewObserverGrainReference(GrainId.FromParsableString(grainIdStr), observerId, runtime));
            }
            else if (systemTargetIndex >= 0)
            {
                grainIdStr = trimmed.Slice(grainIdIndex, systemTargetIndex - grainIdIndex).Trim();
                ReadOnlySpan <char> systemTargetStr = trimmed.Slice(systemTargetIndex + SYSTEM_TARGET_STR_WITH_EQUAL_SIGN.Length);
                SiloAddress         siloAddress     = SiloAddress.FromParsableString(systemTargetStr.ToString());
                return(FromGrainId(GrainId.FromParsableString(grainIdStr), runtime, null, siloAddress));
            }
            else
            {
                grainIdStr = trimmed.Slice(grainIdIndex);
                return(FromGrainId(GrainId.FromParsableString(grainIdStr), runtime));
            }
        }