58 lines
1.7 KiB
C++
58 lines
1.7 KiB
C++
#include <assert.h>
|
|
#include <broker/broker.hh>
|
|
#include <iostream>
|
|
#include <poll.h>
|
|
|
|
using namespace broker;
|
|
|
|
int main() {}
|
|
|
|
void f1() {
|
|
// --attach-master-start
|
|
endpoint ep;
|
|
auto ds = ep.attach_master("foo", backend::memory);
|
|
// --attach-master-end
|
|
|
|
// --get-with-error-start
|
|
auto result = ds->get("foo");
|
|
if (result)
|
|
std::cout << *result << std::endl; // Print current value of 'foo'.
|
|
else if (result.error() == ec::no_such_key)
|
|
std::cout << "key 'foo' does not exist'" << std::endl;
|
|
else if (result.error() == ec::backend_failure)
|
|
std::cout << "something went wrong with the backend" << std::endl;
|
|
else
|
|
std::cout << "could not retrieve value at key 'foo'" << std::endl;
|
|
// --get-with-error-end
|
|
|
|
///
|
|
|
|
// --proxy-start
|
|
// Add a value to a data store (master or clone).
|
|
ds->put("foo", 42);
|
|
// Create a proxy.
|
|
auto proxy = store::proxy{*ds};
|
|
// Perform an asynchyronous request to look up a value.
|
|
auto id = proxy.get("foo");
|
|
// Get a file descriptor for event loops.
|
|
auto fd = proxy.mailbox().descriptor();
|
|
// Wait for result.
|
|
::pollfd p = {fd, POLLIN, 0};
|
|
auto n = ::poll(&p, 1, -1);
|
|
if (n < 0)
|
|
std::terminate(); // poll failed
|
|
|
|
if (n == 1 && p.revents & POLLIN) {
|
|
auto response = proxy.receive(); // Retrieve result, won't block now.
|
|
assert(response.id == id);
|
|
// Check whether we got data or an error.
|
|
if (response.answer)
|
|
std::cout << *response.answer << std::endl; // may print 42
|
|
else if (response.answer.error() == ec::no_such_key)
|
|
std::cout << "no such key: 'foo'" << std::endl;
|
|
else
|
|
std::cout << "failed to retrieve value at key 'foo'" << std::endl;
|
|
}
|
|
// --proxy-end
|
|
}
|