// Copyright 2004-present Facebook. All Rights Reserved. #pragma once #include #include #ifndef RN_EXPORT #define RN_EXPORT __attribute__((visibility("default"))) #endif namespace facebook { namespace react { class Instance; class MessageQueueThread; std::function makeCallback( std::weak_ptr instance, const folly::dynamic& callbackId); class RN_EXPORT CxxNativeModule : public NativeModule { public: CxxNativeModule(std::weak_ptr instance, std::string name, xplat::module::CxxModule::Provider provider, std::shared_ptr messageQueueThread) : instance_(instance) , name_(std::move(name)) , provider_(provider) , messageQueueThread_(messageQueueThread) {} std::string getName() override; std::vector getMethods() override; folly::dynamic getConstants() override; void invoke(unsigned int reactMethodId, folly::dynamic&& params, int callId) override; MethodCallResult callSerializableNativeHook(unsigned int hookId, folly::dynamic&& args) override; private: void lazyInit(); std::weak_ptr instance_; std::string name_; xplat::module::CxxModule::Provider provider_; std::shared_ptr messageQueueThread_; std::unique_ptr module_; std::vector methods_; }; } }