Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
dispatcher.hpp
Go to the documentation of this file.
1#pragma once
2
5#include <atomic>
6#include <cstdint>
7#include <functional>
8#include <mutex>
9#include <shared_mutex>
10#include <stdexcept>
11#include <thread>
12#include <utility>
13#include <vector>
14
15namespace bb::messaging {
16
17using message_handler = std::function<bool(msgpack::object&, msgpack::sbuffer&)>;
22
24 private:
26 mutable std::shared_mutex mutex;
27
28 public:
29 MessageDispatcher() = default;
30
31 bool on_new_data(msgpack::object& obj, msgpack::sbuffer& buffer) const
32 {
34 obj.convert(header);
35
36 auto iter = message_handlers.find(header.msgType);
37 if (iter == message_handlers.end()) {
38 throw std::runtime_error("No registered handler for message of type " + std::to_string(header.msgType));
39 }
40
41 // If the msg type has been marked as 'unique' then we need to give it exclusive execution context
42 if (iter->second.unique) {
44 return (iter->second.handler)(obj, buffer);
45 }
47 return (iter->second.handler)(obj, buffer);
48 }
49
50 void register_target(uint32_t msgType, const message_handler& handler, bool unique = false)
51 {
52 MessageHandler msg_handler{ unique, handler };
53 message_handlers.insert({ msgType, msg_handler });
54 }
55};
56
57} // namespace bb::messaging
bool on_new_data(msgpack::object &obj, msgpack::sbuffer &buffer) const
void register_target(uint32_t msgType, const message_handler &handler, bool unique=false)
std::unordered_map< uint32_t, MessageHandler > message_handlers
uint8_t buffer[RANDOM_BUFFER_SIZE]
Definition engine.cpp:34
std::function< bool(msgpack::object &, msgpack::sbuffer &)> message_handler
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
std::string to_string(bb::avm2::ValueTag tag)