コード例 #1
0
        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);
        }
コード例 #2
0
 public AbstractQmsMessage CreateMessage(long messageNbr, bool redelivered,
                                         ContentHeaderBody contentHeader,
                                         IList bodies)
 {
     AbstractQmsMessage msg = CreateMessageWithBody(messageNbr, contentHeader, bodies);
     msg.Redelivered = redelivered;
     return msg;
 }
コード例 #3
0
        public static AMQFrame CreateAMQFrame(ushort channelId, ContentHeaderBody body)
        {
            AMQFrame frame = new AMQFrame();

            frame.Channel   = channelId;
            frame.BodyFrame = body;
            return(frame);
        }
コード例 #4
0
      /// <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);
      }
コード例 #5
0
        //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);
        }
コード例 #6
0
 protected abstract AbstractQmsMessage CreateMessage(long messageNbr, ByteBuffer data, ContentHeaderBody contentHeader);
コード例 #7
0
 protected override AbstractQmsMessage CreateMessage(long deliveryTag, ByteBuffer data, ContentHeaderBody contentHeader)
 {
     return new QpidTextMessage(deliveryTag, (BasicContentHeaderProperties) contentHeader.Properties, data);
 }
コード例 #8
0
 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);
     }
 }
コード例 #9
0
 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)
 {
 }
コード例 #10
0
 public static AMQFrame CreateAMQFrame(ushort channelId, ContentHeaderBody body)
 {
     AMQFrame frame = new AMQFrame();
     frame.Channel = channelId;
     frame.BodyFrame = body;
     return frame;
 }