コード例 #1
0
        protected internal static object DeserializeGrainReference(Type t, BinaryTokenStreamReader stream)
        {
            GrainId     id                 = stream.ReadGrainId();
            SiloAddress silo               = null;
            GuidId      observerId         = null;
            byte        siloAddressPresent = stream.ReadByte();

            if (siloAddressPresent != 0)
            {
                silo = stream.ReadSiloAddress();
            }
            bool expectObserverId = id.IsClient;

            if (expectObserverId)
            {
                observerId = GuidId.DeserializeFromStream(stream);
            }
            // store as null, serialize as empty.
            var genericArg = stream.ReadString();

            if (String.IsNullOrEmpty(genericArg))
            {
                genericArg = null;
            }

            if (expectObserverId)
            {
                return(NewObserverGrainReference(id, observerId));
            }
            return(FromGrainId(id, genericArg, silo));
        }
コード例 #2
0
ファイル: GrainReference.cs プロジェクト: tcunning/orleans
        protected internal static object DeserializeGrainReference(Type t, BinaryTokenStreamReader stream)
        {
            GrainId     id   = stream.ReadGrainId();
            SiloAddress silo = null;
            byte        siloAddressPresent = stream.ReadByte();

            if (siloAddressPresent != 0)
            {
                silo = stream.ReadSiloAddress();
            }
            // store as null, serialize as empty.
            var genericArg = stream.ReadString();

            if (String.IsNullOrEmpty(genericArg))
            {
                genericArg = null;
            }

            return(FromGrainId(id, genericArg, silo));
        }
コード例 #3
0
ファイル: GrainId.cs プロジェクト: rockdude/orleans
        internal static GrainId FromByteArray(byte[] byteArray)
        {
            var reader = new BinaryTokenStreamReader(byteArray);

            return(reader.ReadGrainId());
        }
コード例 #4
0
ファイル: Message.cs プロジェクト: watrwatr/orleans
            public static System.Object Deserializer(System.Type expected, BinaryTokenStreamReader stream)
            {
                var result = new HeadersContainer();

                Orleans.Serialization.DeserializationContext.Current.RecordObject(result);
                var headers = (Headers)stream.ReadInt();

                if ((headers & Headers.CACHE_INVALIDATION_HEADER) != Headers.NONE)
                {
                    var n = stream.ReadInt();
                    if (n > 0)
                    {
                        var list = result.CacheInvalidationHeader = new List <ActivationAddress>(n);
                        for (int i = 0; i < n; i++)
                        {
                            list.Add((ActivationAddress)ReadObj(typeof(ActivationAddress), stream));
                        }
                    }
                }

                if ((headers & Headers.CATEGORY) != Headers.NONE)
                {
                    result.Category = (Categories)stream.ReadByte();
                }

                if ((headers & Headers.DEBUG_CONTEXT) != Headers.NONE)
                {
                    result.DebugContext = stream.ReadString();
                }

                if ((headers & Headers.DIRECTION) != Headers.NONE)
                {
                    result.Direction = (Message.Directions)stream.ReadByte();
                }

                if ((headers & Headers.EXPIRATION) != Headers.NONE)
                {
                    result.Expiration = stream.ReadDateTime();
                }

                if ((headers & Headers.FORWARD_COUNT) != Headers.NONE)
                {
                    result.ForwardCount = stream.ReadInt();
                }

                if ((headers & Headers.GENERIC_GRAIN_TYPE) != Headers.NONE)
                {
                    result.GenericGrainType = stream.ReadString();
                }

                if ((headers & Headers.CORRELATION_ID) != Headers.NONE)
                {
                    result.Id = (Orleans.Runtime.CorrelationId)ReadObj(typeof(Orleans.Runtime.CorrelationId), stream);
                }

                if ((headers & Headers.ALWAYS_INTERLEAVE) != Headers.NONE)
                {
                    result.IsAlwaysInterleave = ReadBool(stream);
                }

                if ((headers & Headers.IS_NEW_PLACEMENT) != Headers.NONE)
                {
                    result.IsNewPlacement = ReadBool(stream);
                }

                if ((headers & Headers.READ_ONLY) != Headers.NONE)
                {
                    result.IsReadOnly = ReadBool(stream);
                }

                if ((headers & Headers.IS_UNORDERED) != Headers.NONE)
                {
                    result.IsUnordered = ReadBool(stream);
                }

                if ((headers & Headers.NEW_GRAIN_TYPE) != Headers.NONE)
                {
                    result.NewGrainType = stream.ReadString();
                }

                if ((headers & Headers.REJECTION_INFO) != Headers.NONE)
                {
                    result.RejectionInfo = stream.ReadString();
                }

                if ((headers & Headers.REJECTION_TYPE) != Headers.NONE)
                {
                    result.RejectionType = (RejectionTypes)stream.ReadByte();
                }

                if ((headers & Headers.REQUEST_CONTEXT) != Headers.NONE)
                {
                    var c           = stream.ReadInt();
                    var requestData = new Dictionary <string, object>(c);
                    for (int i = 0; i < c; i++)
                    {
                        requestData[stream.ReadString()] = SerializationManager.DeserializeInner(null, stream);
                    }
                    result.RequestContextData = requestData;
                }

                if ((headers & Headers.RESEND_COUNT) != Headers.NONE)
                {
                    result.ResendCount = stream.ReadInt();
                }

                if ((headers & Headers.RESULT) != Headers.NONE)
                {
                    result.Result = (Orleans.Runtime.Message.ResponseTypes)stream.ReadByte();
                }

                if ((headers & Headers.SENDING_ACTIVATION) != Headers.NONE)
                {
                    result.SendingActivation = stream.ReadActivationId();
                }

                if ((headers & Headers.SENDING_GRAIN) != Headers.NONE)
                {
                    result.SendingGrain = stream.ReadGrainId();
                }

                if ((headers & Headers.SENDING_SILO) != Headers.NONE)
                {
                    result.SendingSilo = stream.ReadSiloAddress();
                }

                if ((headers & Headers.TARGET_ACTIVATION) != Headers.NONE)
                {
                    result.TargetActivation = stream.ReadActivationId();
                }

                if ((headers & Headers.TARGET_GRAIN) != Headers.NONE)
                {
                    result.TargetGrain = stream.ReadGrainId();
                }

                if ((headers & Headers.TARGET_OBSERVER) != Headers.NONE)
                {
                    result.TargetObserverId = (Orleans.Runtime.GuidId)ReadObj(typeof(Orleans.Runtime.GuidId), stream);
                }

                if ((headers & Headers.TARGET_SILO) != Headers.NONE)
                {
                    result.TargetSilo = stream.ReadSiloAddress();
                }

                return((HeadersContainer)result);
            }