#include "options.hpp"
#include <iostream>
private:
std::string url;
bool ready, canceled;
public:
scheduled_sender(const std::string &s, double d, double t) :
url(s),
work_queue(0),
ready(true),
canceled(false)
{}
}
sender = s;
s.
container().
schedule(timeout, [
this]() { this->work_queue->
add( [
this]() { this->cancel(); }); });
}
void cancel() {
canceled = true;
}
void tick() {
if (!canceled)
sender.
container().
schedule(interval, [
this]() { this->work_queue->
add( [
this]() { this->tick(); }); });
send();
else
ready = true;
}
if (ready)
send();
}
void send() {
std::cout << "send" << std::endl;
ready = false;
}
};
int main(int argc, char **argv) {
std::string address("127.0.0.1:5672/examples");
double interval = 1.0;
double timeout = 5.0;
example::options opts(argc, argv);
opts.add_value(address, 'a', "address", "connect and send to URL", "URL");
opts.add_value(interval, 'i', "interval", "send a message every INTERVAL seconds", "INTERVAL");
opts.add_value(timeout, 't', "timeout", "stop after T seconds", "T");
try {
opts.parse();
scheduled_sender h(address, interval, timeout);
return 0;
} catch (const example::bad_option& e) {
std::cout << opts << std::endl << e.what() << std::endl;
} catch (const std::exception& e) {
std::cerr << e.what() << std::endl;
}
return 1;
}
void close()
Close the connection.
A top-level container of connections, sessions, and links.
Definition: container.hpp:49
void run()
Run the container in the current thread.
void schedule(duration dur, work fn)
Schedule fn for execution after a duration.
returned< sender > open_sender(const std::string &addr_url)
Open a connection and sender for addr_url.
A span of time in milliseconds.
Definition: duration.hpp:39
static const duration SECOND
One second.
Definition: duration.hpp:55
class container & container() const
The container for this link.
class work_queue & work_queue() const
Get the work_queue for the link.
int credit() const
Credit available on the link.
class connection connection() const
The connection that owns this link.
An AMQP message.
Definition: message.hpp:48
Handler for Proton messaging events.
Definition: messaging_handler.hpp:69
virtual void on_sendable(sender &)
A message can be sent.
virtual void on_container_start(container &)
The container event loop is starting.
virtual void on_sender_open(sender &)
The remote peer opened the link.
A channel for sending messages.
Definition: sender.hpp:40
tracker send(const message &m)
Send a message on the sender.
Unsettled API - A context for thread-safe execution of work.
Definition: work_queue.hpp:327
bool add(work fn)
Unsettled API - Add work fn to the work queue.
A connection to a remote AMQP peer.
A top-level container of connections, sessions, and links.
Handler for Proton messaging events.
A channel for sending messages.
A tracker for a sent message.
Unsettled API - A context for thread-safe execution of work.