13 template <
typename T,
typename R>
14 void register_handler(uint32_t msgType, T* self, R (T::*handler)() const, bool unique = false)
19 template <
typename T,
typename R>
20 void register_handler(uint32_t msgType, T* self, R (T::*handler)(), bool unique = false)
22 _register_handler<messaging::HeaderOnlyMessage, R>(
23 msgType, [=](
auto,
const msgpack::object&) {
return (self->*handler)(); }, unique);
26 template <
typename T,
typename P,
typename R>
27 void register_handler(uint32_t msgType, T* self, R (T::*handler)(const P&) const, bool unique = false)
32 template <
typename T,
typename P,
typename R>
33 void register_handler(uint32_t msgType, T* self, R (T::*handler)(const P&), bool unique = false)
35 _register_handler<messaging::TypedMessage<P>, R>(
41 template <
typename T,
typename P,
typename R>
44 R (T::*handler)(const P&, const
msgpack::object&) const,
50 template <
typename T,
typename P,
typename R>
53 R (T::*handler)(const P&, const
msgpack::object&),
56 _register_handler<messaging::TypedMessage<P>, R>(
59 return (self->*handler)(req.value, obj);
66 Napi::Env env =
info.Env();
72 deferred->Reject(Napi::TypeError::New(env,
"Message processor is closed").
Value());
73 }
else if (
info.Length() < 1) {
74 deferred->Reject(Napi::TypeError::New(env,
"Wrong number of arguments").
Value());
75 }
else if (!
info[0].IsBuffer()) {
76 deferred->Reject(Napi::TypeError::New(env,
"Argument must be a buffer").
Value());
78 auto buffer =
info[0].As<Napi::Buffer<char>>();
87 msgpack::object_handle obj_handle = msgpack::unpack(
data->data(),
length);
88 msgpack::object obj = obj_handle.get();
96 return deferred->Promise();
105 template <
typename P,
typename R>
107 const std::function<R(
const P&,
const msgpack::object&)>& fn,
112 [=](msgpack::object& obj, msgpack::sbuffer&
buffer) {
114 obj.convert(req_msg);
116 R response = fn(req_msg, obj);
120 msgpack::pack(
buffer, resp_msg);
bool on_new_data(msgpack::object &obj, msgpack::sbuffer &buffer) const
void register_target(uint32_t msgType, const message_handler &handler, bool unique=false)
void register_handler(uint32_t msgType, T *self, R(T::*handler)(const P &, const msgpack::object &), bool unique=false)
void register_handler(uint32_t msgType, T *self, R(T::*handler)() const, bool unique=false)
void register_handler(uint32_t msgType, T *self, R(T::*handler)(const P &) const, bool unique=false)
void register_handler(uint32_t msgType, T *self, R(T::*handler)(const P &, const msgpack::object &) const, bool unique=false)
bb::messaging::MessageDispatcher dispatcher
void register_handler(uint32_t msgType, T *self, R(T::*handler)(const P &), bool unique=false)
Napi::Promise process_message(const Napi::CallbackInfo &info)
void register_handler(uint32_t msgType, T *self, R(T::*handler)(), bool unique=false)
void _register_handler(uint32_t msgType, const std::function< R(const P &, const msgpack::object &)> &fn, bool unique=false)
Encapsulatest some work that can be done off the JavaScript main thread.
const std::vector< FF > data
uint8_t const size_t length
uint8_t buffer[RANDOM_BUFFER_SIZE]
std::vector< uint8_t > Value
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept