Skip to content

Commit f04bc43

Browse files
committed
Add a test file and few improvements
1 parent f19223d commit f04bc43

15 files changed

+348
-310
lines changed

cpp/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,6 @@ set(qpid-proton-cpp-source
120120
src/terminus.cpp
121121
src/timestamp.cpp
122122
src/tracker.cpp
123-
src/transaction_handler.cpp
124123
src/transfer.cpp
125124
src/transport.cpp
126125
src/type_id.cpp

cpp/examples/tx_recv.cpp

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
#include <proton/messaging_handler.hpp>
3030
#include <proton/receiver_options.hpp>
3131
#include <proton/source.hpp>
32-
#include <proton/transaction_handler.hpp>
3332
#include <proton/types.hpp>
3433

3534
#include <iostream>
@@ -40,7 +39,7 @@
4039
#include <chrono>
4140
#include <thread>
4241

43-
class tx_recv : public proton::messaging_handler, proton::transaction_handler {
42+
class tx_recv : public proton::messaging_handler {
4443
private:
4544
proton::receiver receiver;
4645
proton::session session;
@@ -68,23 +67,23 @@ class tx_recv : public proton::messaging_handler, proton::transaction_handler {
6867
}
6968

7069
void on_session_open(proton::session &s) override {
71-
std::cout << "New session is open" << std::endl;
72-
s.transaction_declare(*this);
73-
session = s;
70+
if(!s.transaction_is_declared()) {
71+
std::cout << "New session is open" << std::endl;
72+
s.transaction_declare(*this);
73+
session = s;
74+
} else {
75+
std::cout << "Transaction is declared: " << s.transaction_id() << std::endl;
76+
receiver.add_credit(batch_size);
77+
}
7478
}
7579

76-
void on_transaction_declare_failed(proton::session s) override {
77-
std::cout << "Transaction declarion failed" << std::endl;
80+
void on_session_error(proton::session &s) override {
81+
std::cout << "Session error: " << s.error().what() << std::endl;
7882
s.connection().close();
7983
exit(-1);
8084
}
8185

82-
void on_transaction_declared(proton::session s) override {
83-
std::cout << "Transaction is declared: " << s.transaction_id() << std::endl;
84-
receiver.add_credit(batch_size);
85-
}
86-
87-
void on_transaction_committed(proton::session s) override {
86+
void on_session_transaction_committed(proton::session &s) override {
8887
std::cout << "Transaction commited" << std::endl;
8988
received += current_batch;
9089
current_batch = 0;
@@ -98,7 +97,7 @@ class tx_recv : public proton::messaging_handler, proton::transaction_handler {
9897
}
9998
}
10099

101-
void on_transaction_aborted(proton::session s) override {
100+
void on_session_transaction_aborted(proton::session &s) override {
102101
std::cout << "Transaction aborted!" << std::endl;
103102
std::cout << "Re-delaring transaction now..." << std::endl;
104103
current_batch = 0;

cpp/examples/tx_send.cpp

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
#include <proton/messaging_handler.hpp>
2929
#include <proton/sender_options.hpp>
3030
#include <proton/types.hpp>
31-
#include <proton/transaction_handler.hpp>
3231

3332
#include <iostream>
3433
#include <map>
@@ -38,7 +37,7 @@
3837
#include <chrono>
3938
#include <thread>
4039

41-
class tx_send : public proton::messaging_handler, proton::transaction_handler {
40+
class tx_send : public proton::messaging_handler {
4241
private:
4342
proton::sender sender;
4443
std::string conn_url_;
@@ -65,27 +64,27 @@ class tx_send : public proton::messaging_handler, proton::transaction_handler {
6564
}
6665

6766
void on_session_open(proton::session& s) override {
68-
std::cout << "New session is open, declaring transaction now..." << std::endl;
69-
s.transaction_declare(*this);
67+
if(!s.transaction_is_declared()) {
68+
std::cout << "New session is open, declaring transaction now..." << std::endl;
69+
s.transaction_declare(*this);
70+
} else {
71+
std::cout << "Transaction is declared: " << s.transaction_id() << std::endl;
72+
send();
73+
}
7074
}
7175

72-
void on_transaction_declare_failed(proton::session s) override {
73-
std::cout << "Transaction declarion failed" << std::endl;
76+
void on_session_error(proton::session &s) override {
77+
std::cout << "Session error: " << s.error().what() << std::endl;
7478
s.connection().close();
7579
exit(-1);
7680
}
7781

78-
void on_transaction_commit_failed(proton::session s) override {
82+
void on_session_transaction_commit_failed(proton::session &s) override {
7983
std::cout << "Transaction commit failed!" << std::endl;
8084
s.connection().close();
8185
exit(-1);
8286
}
8387

84-
void on_transaction_declared(proton::session s) override {
85-
std::cout << "Transaction is declared: " << s.transaction_id() << std::endl;
86-
send();
87-
}
88-
8988
void on_sendable(proton::sender&) override {
9089
send();
9190
}
@@ -117,7 +116,7 @@ class tx_send : public proton::messaging_handler, proton::transaction_handler {
117116
}
118117
}
119118

120-
void on_transaction_committed(proton::session s) override {
119+
void on_session_transaction_committed(proton::session &s) override {
121120
committed += current_batch;
122121
current_batch = 0;
123122
std::cout << "Transaction commited" << std::endl;
@@ -131,7 +130,7 @@ class tx_send : public proton::messaging_handler, proton::transaction_handler {
131130
}
132131
}
133132

134-
void on_transaction_aborted(proton::session s) override {
133+
void on_session_transaction_aborted(proton::session &s) override {
135134
std::cout << "Transaction aborted!" << std::endl;
136135
std::cout << "Re-delaring transaction now..." << std::endl;
137136
current_batch = 0;

cpp/include/proton/fwd.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ class source_options;
5555
class ssl;
5656
class target_options;
5757
class tracker;
58-
class transaction_handler;
5958
class transport;
6059
class url;
6160
class void_function0;

cpp/include/proton/messaging_handler.hpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,15 @@ PN_CPP_CLASS_EXTERN messaging_handler {
172172
/// The remote peer closed the session with an error condition.
173173
PN_CPP_EXTERN virtual void on_session_error(session&);
174174

175+
/// Called when a local transaction is discharged successfully.
176+
PN_CPP_EXTERN virtual void on_session_transaction_committed(session&);
177+
178+
/// Called when the commit of a local transaction fails.
179+
PN_CPP_EXTERN virtual void on_session_transaction_commit_failed(session&);
180+
181+
/// Called when a local transaction is discharged unsuccessfully (aborted).
182+
PN_CPP_EXTERN virtual void on_session_transaction_aborted(session&);
183+
175184
/// The remote peer opened the link.
176185
PN_CPP_EXTERN virtual void on_receiver_open(receiver&);
177186

cpp/include/proton/session.hpp

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,6 @@ struct pn_session_t;
3737

3838
namespace proton {
3939

40-
/// @cond INTERNAL
41-
class transaction_impl;
42-
/// @endcond
43-
4440
/// A container of senders and receivers.
4541
class
4642
PN_CPP_CLASS_EXTERN session : public internal::object<pn_session_t>, public endpoint {
@@ -109,7 +105,7 @@ PN_CPP_CLASS_EXTERN session : public internal::object<pn_session_t>, public endp
109105
/// Get user data from this session.
110106
PN_CPP_EXTERN void* user_data() const;
111107

112-
PN_CPP_EXTERN void transaction_declare(proton::transaction_handler &handler, bool settle_before_discharge = false);
108+
PN_CPP_EXTERN void transaction_declare(proton::messaging_handler &handler, bool settle_before_discharge = false);
113109
PN_CPP_EXTERN bool transaction_is_declared();
114110
PN_CPP_EXTERN proton::binary transaction_id() const;
115111
PN_CPP_EXTERN void transaction_commit();
@@ -121,7 +117,6 @@ PN_CPP_CLASS_EXTERN session : public internal::object<pn_session_t>, public endp
121117
friend class internal::factory<session>;
122118
friend class sender;
123119
friend class session_iterator;
124-
friend class transaction_impl;
125120
/// @endcond
126121
};
127122

cpp/include/proton/transaction_handler.hpp

Lines changed: 0 additions & 61 deletions
This file was deleted.

cpp/src/contexts.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ namespace proton {
4242

4343
class proton_handler;
4444
class connector;
45+
class transaction_impl;
4546

4647
namespace io {class link_namer;}
4748

cpp/src/delivery.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,12 @@ namespace {
3636
void settle_delivery(pn_delivery_t* o, uint64_t state) {
3737
proton::session session = proton::make_wrapper(o).session();
3838
if(session.transaction_is_declared()) {
39-
// Transactional disposition
39+
// Transactional disposition
4040
auto disp = pn_transactional_disposition(pn_delivery_local(o));
4141
pn_transactional_disposition_set_id(disp, pn_bytes(session.transaction_id()));
4242
pn_transactional_disposition_set_outcome_type(disp, state);
4343
} else {
44-
pn_delivery_update(o, state);
44+
pn_delivery_update(o, state);
4545
}
4646
pn_delivery_settle(o);
4747
}

cpp/src/handler.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@ void messaging_handler::on_session_open(session &s) {
6565
pn_session_open(unwrap(s));
6666
}
6767
}
68+
void messaging_handler::on_session_transaction_committed(session &) {}
69+
void messaging_handler::on_session_transaction_commit_failed(session &) {}
70+
void messaging_handler::on_session_transaction_aborted(session &) {}
71+
6872
void messaging_handler::on_receiver_close(receiver &) {}
6973
void messaging_handler::on_receiver_error(receiver &l) { on_error(l.error()); }
7074
void messaging_handler::on_receiver_open(receiver &l) {

0 commit comments

Comments
 (0)