Patrick Kelley 8fd444092b initial
2025-05-07 15:35:15 -04:00

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
}