@@ -88,6 +88,11 @@ SenderHandler::SenderHandler(
8888 duration_mode(duration_mode),
8989 sent(0 ),
9090 confirmedSent(0 ),
91+ batch_size(1 ),
92+ current_batch(0 ),
93+ committed(0 ),
94+ confirmed(0 ),
95+ total(0 ),
9196 m(),
9297 timer_event(*this ),
9398 interval(duration::IMMEDIATE)
@@ -205,6 +210,11 @@ void SenderHandler::on_container_start(container &c)
205210 work_q->schedule (duration::IMMEDIATE, make_work (&SenderHandler::checkIfCanSend, this ));
206211 }
207212#endif
213+ // TODO Transactions
214+ tx = NULL ;
215+ cont = &c;
216+ // currently causes seqfault
217+ // c.declare_transaction(conn, th);
208218}
209219
210220void SenderHandler::on_sendable (sender &s)
@@ -258,6 +268,14 @@ void SenderHandler::on_tracker_reject(tracker &t)
258268void SenderHandler::on_connection_close (connection &c)
259269{
260270 logger (debug) << " Closing connection" ;
271+ // TODO debug remove
272+ // logger(info) << "Transactions";
273+ // logger(info) << "Transaction total: " << total;
274+ // logger(info) << "Transaction sent: " << sent;
275+ // logger(info) << "Transaction batch size: " << batch_size;
276+ // logger(info) << "Transaction current batch: " << current_batch;
277+ // logger(info) << "Transaction confirmed: " << confirmed;
278+ // logger(info) << "Transaction committed: " << committed;
261279}
262280
263281void SenderHandler::on_connection_error (connection &c)
@@ -269,7 +287,6 @@ void SenderHandler::on_connection_error(connection &c)
269287 }
270288}
271289
272-
273290void SenderHandler::setCount (int count)
274291{
275292 this ->count = count;
@@ -280,6 +297,16 @@ int SenderHandler::getCount() const
280297 return count;
281298}
282299
300+ void SenderHandler::setBatchSize (int batchSize)
301+ {
302+ this ->batch_size = batchSize;
303+ }
304+
305+ int SenderHandler::getBatchSize () const
306+ {
307+ return batch_size;
308+ }
309+
283310void SenderHandler::setMessage (message &msg)
284311{
285312 this ->m = msg;
@@ -361,6 +388,34 @@ void SenderHandler::send()
361388 ready = false ;
362389}
363390
391+ // TODO VIP TRANSACTIONS
392+
393+ void SenderHandler::on_transaction_declared (transaction &t) {
394+ tx = &t;
395+ send ();
396+ }
397+
398+ void SenderHandler::on_transaction_committed (transaction &t) {
399+ committed += current_batch;
400+ connection conn = sndr.connection ();
401+ if (committed == total) {
402+ std::cout << " All messages committed" ;
403+ conn.close ();
404+ }
405+ else {
406+ current_batch = 0 ;
407+ cont->declare_transaction (conn, th);
408+ }
409+ }
410+
411+ void SenderHandler::on_sender_close (sender &s) {
412+ current_batch = 0 ;
413+ }
414+
415+ // override
416+ // void SenderHandler::on_sendable(sender &s) override {}
417+ // void SenderHandler::on_tracker_accept(tracker &t) override {}
418+
364419} /* namespace reactor */
365420} /* namespace proton */
366421} /* namespace dtests */
0 commit comments