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; }
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; }