/// <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(); } }
/// <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; } }
/// <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; } }