diff options
author | Gordon Sim <gsim@apache.org> | 2008-05-29 12:03:26 +0000 |
---|---|---|
committer | Gordon Sim <gsim@apache.org> | 2008-05-29 12:03:26 +0000 |
commit | 35669f253aceecd2f258ddbd9d8cbffc50e0a65b (patch) | |
tree | 57efbd4ff3ed82ebef669299822c4dd4d191f4f1 /cpp/src | |
parent | e4aefee4b6a80f92e5b67f78334833f0c3b3b4e5 (diff) | |
download | qpid-python-35669f253aceecd2f258ddbd9d8cbffc50e0a65b.tar.gz |
Move AckPolicy impl from header to .cpp; ensure that completion is marked even when auto-acking is turned off.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@661309 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Makefile.am | 3 | ||||
-rw-r--r-- | cpp/src/qpid/client/AckPolicy.cpp | 50 | ||||
-rw-r--r-- | cpp/src/qpid/client/AckPolicy.h | 29 |
3 files changed, 58 insertions, 24 deletions
diff --git a/cpp/src/Makefile.am b/cpp/src/Makefile.am index 0a2fe4df6f..50edff3f00 100644 --- a/cpp/src/Makefile.am +++ b/cpp/src/Makefile.am @@ -316,7 +316,8 @@ libqpidclient_la_LIBADD = libqpidcommon.la -luuid libqpidclient_la_SOURCES = \ $(rgen_client_srcs) \ - qpid/client/Bounds.cpp \ + qpid/client/AckPolicy.cpp \ + qpid/client/Bounds.cpp \ qpid/client/ConnectionImpl.cpp \ qpid/client/Connector.cpp \ qpid/client/Connection.cpp \ diff --git a/cpp/src/qpid/client/AckPolicy.cpp b/cpp/src/qpid/client/AckPolicy.cpp new file mode 100644 index 0000000000..7956ebad0f --- /dev/null +++ b/cpp/src/qpid/client/AckPolicy.cpp @@ -0,0 +1,50 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +#include "AckPolicy.h" + +namespace qpid { +namespace client { + +AckPolicy::AckPolicy(size_t n) : interval(n), count(n) {} + +void AckPolicy::ack(const Message& msg, AsyncSession session) +{ + accepted.add(msg.getId()); + if (interval && --count==0) { + session.markCompleted(msg.getId(), false, true); + session.messageAccept(accepted); + accepted.clear(); + count = interval; + } else { + session.markCompleted(msg.getId(), false, false); + } +} + +void AckPolicy::ackOutstanding(AsyncSession session) +{ + if (!accepted.empty()) { + session.messageAccept(accepted); + accepted.clear(); + session.sendCompletion(); + } +} + +}} // namespace qpid::client diff --git a/cpp/src/qpid/client/AckPolicy.h b/cpp/src/qpid/client/AckPolicy.h index d00df1ef26..2faa600556 100644 --- a/cpp/src/qpid/client/AckPolicy.h +++ b/cpp/src/qpid/client/AckPolicy.h @@ -23,6 +23,7 @@ #include "qpid/framing/SequenceSet.h" #include "qpid/client/AsyncSession.h" +#include "qpid/client/Message.h" namespace qpid { namespace client { @@ -40,32 +41,14 @@ class AckPolicy public: /** + * Sends accepts and marks completion of received transfers. + * *@param n: acknowledge every n messages. *n==0 means no automatic acknowledgement. */ - AckPolicy(size_t n=1) : interval(n), count(n) {} - - void ack(const Message& msg, AsyncSession session) { - accepted.add(msg.getId()); - if (!interval) return; - if (--count==0) { - session.markCompleted(msg.getId(), false, true); - session.messageAccept(accepted); - accepted.clear(); - count = interval; - } else { - session.markCompleted(msg.getId(), false, false); - } - } - - void ackOutstanding(AsyncSession session) { - if (!accepted.empty()) { - session.messageAccept(accepted); - accepted.clear(); - session.sendCompletion(); - } - } -}; + AckPolicy(size_t n=1); + void ack(const Message& msg, AsyncSession session); + void ackOutstanding(AsyncSession session);}; }} // namespace qpid::client |