FastLED 3.10.8
Loading...
Searching...
No Matches

◆ bindAsync()

void fl::Rpc::bindAsync ( const char * name,
fl::function< void(ResponseSend &, const json &)> fn,
fl::RpcMode mode = fl::RpcMode::ASYNC )

Bind async method with ResponseSend& parameter (for ASYNC/ASYNC_STREAM modes) Signature: void(ResponseSend&, const json&) The ResponseSend& parameter is automatically injected with request ID and response sink The json& parameter contains the raw JSON params from the request.

EXAMPLE: rpc.bindAsync("longTask", [](ResponseSend& send, const json& params) { // ACK already sent automatically // Do work... send.send(json::object().set("value", 42)); // Send result });

Definition at line 41 of file rpc.cpp.hpp.

43 {
44 fl::string key(name);
45
46 detail::RpcEntry entry;
47 entry.mTypeTag = detail::TypeTag<void(const json&)>::id();
48 entry.mMode = mode;
49 entry.mIsResponseAware = true;
50 entry.mResponseAwareFn = fl::move(fn);
51
52#if FL_PLATFORM_HAS_LARGE_MEMORY
53 // Create schema generator for void(json) signature (params not decomposed).
54 // Gated on Low-memory per FastLED #3081 / #3079 (rpc.discover unreachable).
55 entry.mSchemaGenerator = fl::make_shared<detail::TypedSchemaGenerator<void(const json&)>>();
56#endif
57 entry.mDescription = "";
58 entry.mTags = {};
59
60 // Create a placeholder invoker (actual invocation handled in handle())
61 struct PlaceholderInvoker : public detail::ErasedInvoker {
62 fl::tuple<TypeConversionResult, json> invoke(const json&) FL_NO_EXCEPT override {
63 // Should not be called - handle() will call mResponseAwareFn directly
64 return fl::make_tuple(TypeConversionResult::success(), json(nullptr));
65 }
66 };
67 entry.mInvoker = fl::make_shared<PlaceholderInvoker>();
68
69 mRegistry[key] = fl::move(entry);
70}
fl::unordered_map< fl::string, detail::RpcEntry > mRegistry
Definition rpc.h:406
constexpr remove_reference< T >::type && move(T &&t) FL_NO_EXCEPT
Definition move.h:30
tuple< typename fl::decay< Ts >::type... > make_tuple(Ts &&... args) FL_NO_EXCEPT
Definition tuple.h:106
auto invoke(F &&f, T1 &&t1, Args &&... args) FL_NO_EXCEPT -> enable_if_t< is_member_function_pointer< typename remove_reference< F >::type >::value &&!detail::use_pointer_syntax< T1 >::value, decltype((fl::forward< T1 >(t1).*f)(fl::forward< Args >(args)...))>
Definition functional.h:45
shared_ptr< T > make_shared(Args &&... args) FL_NO_EXCEPT
Definition shared_ptr.h:423
#define FL_NO_EXCEPT

References fl::FL_NO_EXCEPT, fl::adl_barrier::invoke(), fl::adl_barrier::make_shared(), fl::adl_barrier::make_tuple(), fl::detail::RpcEntry::mDescription, fl::detail::RpcEntry::mInvoker, fl::detail::RpcEntry::mIsResponseAware, fl::detail::RpcEntry::mMode, fl::adl_barrier::move(), mRegistry, fl::detail::RpcEntry::mResponseAwareFn, fl::detail::RpcEntry::mSchemaGenerator, fl::detail::RpcEntry::mTags, fl::detail::RpcEntry::mTypeTag, and fl::TypeConversionResult::success().

+ Here is the call graph for this function: