コード例 #1
0
        private Type GetMessageType(Frame frame)
        {
            Type type;
            ArraySegment<Byte> encodedBytes = frame.Body;
            String typeName = Encoding.UTF8.GetString(encodedBytes.Array, encodedBytes.Offset, encodedBytes.Count);

            if (knownTypes.TryGetValue(typeName, out type))
                return type;

            knownTypes[typeName] = type = Type.GetType(typeName);

            return type;
        }
コード例 #2
0
        private Frame GetOrCreateTypeFrame(Object message)
        {
            Frame typeFrame;
            Type type = message.GetType();

            if (this.typeHeaders.TryGetValue(type, out typeFrame))
                return typeFrame;

            var assemblyQualifiedName = type.AssemblyQualifiedName ?? String.Empty;
            var versionlessAssemblyQualifiedName = Regex.Replace(assemblyQualifiedName, @", Version=\d+.\d+.\d+.\d+,", ",");
            var encodedBytes = Encoding.UTF8.GetBytes(versionlessAssemblyQualifiedName);
            var rawFrame = new Byte[encodedBytes.Length + sizeof (Byte)];

            rawFrame[0] = (Byte)(FrameFlags.Header | FrameFlags.More);
            Buffer.BlockCopy(encodedBytes, 0, rawFrame, 0, encodedBytes.Length);

            this.typeHeaders[type] = typeFrame = new Frame(rawFrame);

            return typeFrame;
        }