[ https://issues.apache.org/jira/browse/PROTON-1442?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18009571#comment-18009571 ]
ASF GitHub Bot commented on PROTON-1442: ---------------------------------------- DreamPearl commented on code in PR #437: URL: https://github.com/apache/qpid-proton/pull/437#discussion_r2228404612 ########## cpp/examples/tx_send.cpp: ########## @@ -0,0 +1,164 @@ +/* + * + * 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 "options.hpp" + +#include <proton/connection.hpp> +#include <proton/container.hpp> +#include <proton/message.hpp> +#include <proton/message_id.hpp> +#include <proton/messaging_handler.hpp> +#include <proton/types.hpp> +#include <proton/transaction_handler.hpp> + +#include <iostream> +#include <map> +#include <string> + +#include <atomic> +#include <chrono> +#include <thread> + +class tx_send : public proton::messaging_handler, proton::transaction_handler { + private: + proton::sender sender; + std::string url; + int total; + int batch_size; + int sent; + int batch_index = 0; + int current_batch = 0; + int committed = 0; + + public: + tx_send(const std::string &s, int c, int b): + url(s), total(c), batch_size(b), sent(0) {} + + void on_container_start(proton::container &c) override { + sender = c.open_sender(url); + } + + void on_session_open(proton::session &s) override { + std::cout << "New session is open, declaring transaction now..." << std::endl; + s.declare_transaction(*this); + } + + void on_transaction_declare_failed(proton::session s) { + std::cout << "Transaction declarion failed" << std::endl; + s.connection().close(); + exit(-1); + } + + void on_transaction_commit_failed(proton::session s) { + std::cout << "Transaction commit failed!" << std::endl; + s.connection().close(); + exit(-1); + } + + void on_transaction_declared(proton::session s) override { + std::cout << "Transaction is declared" << std::endl; + send(); + } + + void on_sendable(proton::sender&) override { + send(); + } + + void send() { + std::atomic<int> unique_id(10000); + proton::session session = sender.session(); + while (session.txn_is_declared() && sender.credit() && + (committed + current_batch) < total) { + proton::message msg; + std::map<std::string, int> m; + m["sequence"] = committed + current_batch; + + msg.id(std::atomic_fetch_add(&unique_id, 1)); + msg.body(m); + std::cout << "Sending: " << msg << std::endl; + session.txn_send(sender, msg); Review Comment: Done! > [c++] Support for transactions > ------------------------------ > > Key: PROTON-1442 > URL: https://issues.apache.org/jira/browse/PROTON-1442 > Project: Qpid Proton > Issue Type: Improvement > Components: cpp-binding > Reporter: Radim Kubis > Assignee: Rakhi Kumari > Priority: Major > > Support for transactions in Qpid Proton C++. -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org For additional commands, e-mail: dev-h...@qpid.apache.org