126 lines
2.4 KiB
C++
126 lines
2.4 KiB
C++
/**
|
|
* Class describing a basic QOS frame
|
|
*
|
|
* @copyright 2014 Copernica BV
|
|
*/
|
|
|
|
/**
|
|
* Set up namespace
|
|
*/
|
|
namespace AMQP {
|
|
|
|
/**
|
|
* Class implementation
|
|
*/
|
|
class BasicQosFrame : public BasicFrame
|
|
{
|
|
private:
|
|
/**
|
|
* specifies the size of the prefetch window in octets
|
|
* @var int32_t
|
|
*/
|
|
int32_t _prefetchSize;
|
|
|
|
/**
|
|
* specifies a prefetch window in terms of whole messages
|
|
* @var int16_t
|
|
*/
|
|
int16_t _prefetchCount;
|
|
|
|
/**
|
|
* apply QoS settings to entire connection
|
|
* @var BooleanSet
|
|
*/
|
|
BooleanSet _global;
|
|
|
|
protected:
|
|
/**
|
|
* Encode a frame on a string buffer
|
|
* @param buffer buffer to write frame to
|
|
*/
|
|
virtual void fill(OutBuffer& buffer) const override
|
|
{
|
|
// call base
|
|
BasicFrame::fill(buffer);
|
|
|
|
// add fields
|
|
buffer.add(_prefetchSize);
|
|
buffer.add(_prefetchCount);
|
|
_global.fill(buffer);
|
|
}
|
|
|
|
public:
|
|
/**
|
|
* Construct a basic qos frame
|
|
*
|
|
* @param channel channel we're working on
|
|
* @param prefetchCount specifies a prefetch window in terms of whole messages
|
|
* @param global share prefetch count with all consumers on the same channel
|
|
* @default false
|
|
*/
|
|
BasicQosFrame(uint16_t channel, int16_t prefetchCount = 0, bool global = false) :
|
|
BasicFrame(channel, 7), // 4 (int32) + 2 (int16) + 1 (bool)
|
|
_prefetchSize(0),
|
|
_prefetchCount(prefetchCount),
|
|
_global(global)
|
|
{}
|
|
|
|
/**
|
|
* Constructor based on incoming frame
|
|
* @param frame
|
|
*/
|
|
BasicQosFrame(ReceivedFrame &frame) :
|
|
BasicFrame(frame),
|
|
_prefetchSize(frame.nextInt32()),
|
|
_prefetchCount(frame.nextInt16()),
|
|
_global(frame)
|
|
{}
|
|
|
|
/**
|
|
* Destructor
|
|
*/
|
|
virtual ~BasicQosFrame() {}
|
|
|
|
/**
|
|
* Return the method ID
|
|
* @return uint16_t
|
|
*/
|
|
virtual uint16_t methodID() const override
|
|
{
|
|
return 10;
|
|
}
|
|
|
|
/**
|
|
* Return the prefetch count
|
|
* @return int16_t
|
|
*/
|
|
int16_t prefetchCount() const
|
|
{
|
|
return _prefetchCount;
|
|
}
|
|
|
|
/**
|
|
* returns the value of global
|
|
* @return boolean
|
|
*/
|
|
bool global() const
|
|
{
|
|
return _global.get(0);
|
|
}
|
|
|
|
/**
|
|
* returns the prefetch size
|
|
* @return int32_t
|
|
*/
|
|
int32_t prefetchSize() const
|
|
{
|
|
return _prefetchSize;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* End namespace
|
|
*/
|
|
}
|
|
|