00001 #ifndef QPID_CLIENT_ACKPOLICY_H
00002 #define QPID_CLIENT_ACKPOLICY_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "qpid/framing/SequenceSet.h"
00025
00026 namespace qpid {
00027 namespace client {
00028
00034 class AckPolicy
00035 {
00036 framing::SequenceSet accepted;
00037 size_t interval;
00038 size_t count;
00039
00040 public:
00045 AckPolicy(size_t n=1) : interval(n), count(n) {}
00046
00047 void ack(const Message& msg, Session& session) {
00048 accepted.add(msg.getId());
00049 if (!interval) return;
00050 if (--count==0) {
00051 session.markCompleted(msg.getId(), false, true);
00052 session.messageAccept(accepted);
00053 accepted.clear();
00054 count = interval;
00055 } else {
00056 session.markCompleted(msg.getId(), false, false);
00057 }
00058 }
00059
00060 void ackOutstanding(Session& session) {
00061 if (!accepted.empty()) {
00062 session.messageAccept(accepted);
00063 accepted.clear();
00064 session.sendCompletion();
00065 }
00066 }
00067 };
00068
00069 }}
00070
00071
00072
00073 #endif