protected AbstractQmsMessage CreateMessageWithBody(long messageNbr, ContentHeaderBody contentHeader, IList bodies) { ByteBuffer data; // we optimise the non-fragmented case to avoid copying if (bodies != null && bodies.Count == 1) { _logger.Debug("Non-fragmented message body (bodySize=" + contentHeader.BodySize +")"); data = ((ContentBody)bodies[0]).Payload; } else { _logger.Debug("Fragmented message body (" + bodies.Count + " frames, bodySize=" + contentHeader.BodySize + ")"); data = ByteBuffer.Allocate((int)contentHeader.BodySize); // XXX: Is cast a problem? foreach (ContentBody body in bodies) { data.Put(body.Payload); //body.Payload.Release(); } data.Flip(); } _logger.Debug("Creating message from buffer with position=" + data.Position + " and remaining=" + data.Remaining); return CreateMessage(messageNbr, data, contentHeader); }
public AbstractQmsMessage CreateMessage(long messageNbr, bool redelivered, ContentHeaderBody contentHeader, IList bodies) { AbstractQmsMessage msg = CreateMessageWithBody(messageNbr, contentHeader, bodies); msg.Redelivered = redelivered; return msg; }
public static AMQFrame CreateAMQFrame(ushort channelId, ContentHeaderBody body) { AMQFrame frame = new AMQFrame(); frame.Channel = channelId; frame.BodyFrame = body; return(frame); }
/// <summary> /// Create a message. This looks up the MIME type from the content header and instantiates the appropriate /// concrete message type. /// </summary> /// <param name="messageNbr">the AMQ message id</param> /// <param name="redelivered">true if redelivered</param> /// <param name="contentHeader">the content header that was received</param> /// <param name="bodies">a list of ContentBody instances</param> /// <returns>the message.</returns> /// <exception cref="AMQException"/> /// <exception cref="QpidException"/> public AbstractQmsMessage CreateMessage(long messageNbr, bool redelivered, ContentHeaderBody contentHeader, IList bodies) { BasicContentHeaderProperties properties = (BasicContentHeaderProperties)contentHeader.Properties; if ( properties.ContentType == null ) { properties.ContentType = ""; } IMessageFactory mf = GetFactory(properties.ContentType); return mf.CreateMessage(messageNbr, redelivered, contentHeader, bodies); }
//protected override AbstractQmsMessage CreateMessageWithBody(long messageNbr, // ContentHeaderBody contentHeader, // IList bodies) //{ // byte[] data; // // we optimise the non-fragmented case to avoid copying // if (bodies != null && bodies.Count == 1) // { // data = ((ContentBody)bodies[0]).Payload; // } // else // { // data = new byte[(long)contentHeader.BodySize]; // int currentPosition = 0; // foreach (ContentBody cb in bodies) // { // Array.Copy(cb.Payload, 0, data, currentPosition, cb.Payload.Length); // currentPosition += cb.Payload.Length; // } // } // return new QpidBytesMessage(messageNbr, data, contentHeader); //} //public override AbstractQmsMessage CreateMessage() //{ // return new QpidBytesMessage(); //} protected override AbstractQmsMessage CreateMessage(long deliveryTag, ByteBuffer data, ContentHeaderBody contentHeader) { return new QpidBytesMessage(deliveryTag, contentHeader, data); }
protected abstract AbstractQmsMessage CreateMessage(long messageNbr, ByteBuffer data, ContentHeaderBody contentHeader);
protected override AbstractQmsMessage CreateMessage(long deliveryTag, ByteBuffer data, ContentHeaderBody contentHeader) { return new QpidTextMessage(deliveryTag, (BasicContentHeaderProperties) contentHeader.Properties, data); }
public void MessageContentHeaderReceived(ushort channelId, ContentHeaderBody contentHeader) { UnprocessedMessage msg = (UnprocessedMessage) _channelId2UnprocessedMsgMap[channelId]; if (msg == null) { throw new AMQException("Error: received content header without having received a JMSDeliver frame first"); } if (msg.ContentHeader != null) { throw new AMQException("Error: received duplicate content header or did not receive correct number of content body frames"); } msg.ContentHeader = contentHeader; if (contentHeader.BodySize == 0) { DeliverMessageToAMQSession(channelId, msg); } }
internal QpidBytesMessage(long messageNbr, ContentHeaderBody contentHeader, ByteBuffer data) // TODO: this casting is ugly. Need to review whole ContentHeaderBody idea : base(messageNbr, (BasicContentHeaderProperties)contentHeader.Properties, data) { }
public static AMQFrame CreateAMQFrame(ushort channelId, ContentHeaderBody body) { AMQFrame frame = new AMQFrame(); frame.Channel = channelId; frame.BodyFrame = body; return frame; }