コード例 #1
0
ファイル: AmfEncoder.cs プロジェクト: sandboxorg/DotAmf
        /// <summary>
        /// Writes a message to a specified stream.
        /// </summary>
        /// <remarks>An actual serialization is performed rigth here.</remarks>
        /// <param name="message">The Message to write to the stream.</param>
        /// <param name="stream">The Stream object to which the message is written.</param>
        public override void WriteMessage(Message message, Stream stream)
        {
            try
            {
                using (var ms = new MemoryStream())
                {
                    //Read AMFX message
                    var writer = XmlDictionaryWriter.CreateDictionaryWriter(AmfxWriter.Create(ms));
                    message.WriteBodyContents(writer);
                    writer.Flush();
                    ms.Seek(0, SeekOrigin.Begin);

                    //Encode binary AMF packet from AMFX data
                    _serializer.WriteObject(stream, AmfxReader.Create(ms));
                }
            }
            finally
            {
                message.Close();
            }
        }
コード例 #2
0
ファイル: AmfEncoder.cs プロジェクト: sandboxorg/DotAmf
        /// <summary>
        /// Reads a message from a specified stream.
        /// </summary>
        /// <remarks>An actual deserialization is performed rigth here.</remarks>
        /// <param name="stream">Stream object from which the message is read.</param>
        /// <param name="maxSizeOfHeaders">The maximum size of the headers that can be read from the message.</param>
        /// <param name="contentType">The Multipurpose Internet Mail Extensions (MIME) message-level content-type.</param>
        /// <returns>The Message that is read from the stream specified.</returns>
        public override Message ReadMessage(Stream stream, int maxSizeOfHeaders, string contentType)
        {
            var ms = new MemoryStream();

            try
            {
                //Decode binary AMF packet into AMFX data
                var output = AmfxWriter.Create(ms);
                _serializer.ReadObject(stream, output);
                output.Flush();
                ms.Seek(0, SeekOrigin.Begin);

                //Write AMFX message
                return(Message.CreateMessage(MessageVersion.None, null, AmfxReader.Create(ms, true)));
            }
            catch
            {
                ms.Dispose();
                throw;
            }
        }
コード例 #3
0
        /// <summary>
        /// The before send reply.
        /// </summary>
        /// <param name="reply">
        /// The reply.
        /// </param>
        /// <param name="correlationState">
        /// The correlation state.
        /// </param>
        /// <exception cref="InvalidOperationException">
        /// </exception>
        public void BeforeSendReply(ref Message reply, object correlationState)
        {
            var message = reply as AmfGenericMessage;

            if (message == null)
            {
                throw new InvalidOperationException("AmfGenericMessage is expected.");
            }

            var packet = new AmfPacket();

            foreach (var header in message.AmfHeaders)
            {
                packet.Headers[header.Key] = header.Value;
            }

            packet.Messages.Add(message.AmfMessage);

            var ms = new MemoryStream();

            try
            {
                // Serialize packet into AMFX data
                XmlWriter output = AmfxWriter.Create(ms);
                this._context.AmfSerializer.WriteObject(output, packet);
                output.Flush();
                ms.Seek(0, SeekOrigin.Begin);

                reply = Message.CreateMessage(MessageVersion.None, null, AmfxReader.Create(ms, true));
            }
            catch
            {
                ms.Dispose();
                throw;
            }
        }