diff --git a/android/src/main/cpp/sonar.cpp b/android/src/main/cpp/sonar.cpp index c1965facc..bcc043292 100644 --- a/android/src/main/cpp/sonar.cpp +++ b/android/src/main/cpp/sonar.cpp @@ -13,6 +13,7 @@ #include #endif +#include #include #include #include @@ -23,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -42,6 +44,9 @@ void handleException(const std::exception& e) { __android_log_write(ANDROID_LOG_ERROR, "FLIPPER", message.c_str()); } +std::unique_ptr sonarScheduler; +std::unique_ptr connectionScheduler; + class JEventBase : public jni::HybridClass { public: constexpr static auto kJavaDescriptor = @@ -412,7 +417,7 @@ class JFlipperSocketProvider : public facebook::flipper::FlipperSocketProvider { virtual std::unique_ptr create( facebook::flipper::FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase) override { + facebook::flipper::Scheduler* scheduler) override { return std::make_unique( std::move(endpoint), std::move(payload)); ; @@ -420,7 +425,7 @@ class JFlipperSocketProvider : public facebook::flipper::FlipperSocketProvider { virtual std::unique_ptr create( FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase, + facebook::flipper::Scheduler* scheduler, ConnectionContextStore* connectionContextStore) override { return std::make_unique( std::move(endpoint), std::move(payload), connectionContextStore); @@ -939,6 +944,11 @@ class JFlipperClient : public jni::HybridClass { const std::string app, const std::string appId, const std::string privateAppDirectory) { + sonarScheduler = + std::make_unique(callbackWorker->eventBase()); + connectionScheduler = + std::make_unique(connectionWorker->eventBase()); + FlipperClient::init( {{std::move(host), std::move(os), @@ -947,8 +957,8 @@ class JFlipperClient : public jni::HybridClass { std::move(app), std::move(appId), std::move(privateAppDirectory)}, - callbackWorker->eventBase(), - connectionWorker->eventBase(), + sonarScheduler.get(), + connectionScheduler.get(), insecurePort, securePort, altInsecurePort, diff --git a/iOS/FlipperKit/FlipperClient.mm b/iOS/FlipperKit/FlipperClient.mm index a7710e80a..17ffd172e 100644 --- a/iOS/FlipperKit/FlipperClient.mm +++ b/iOS/FlipperKit/FlipperClient.mm @@ -10,9 +10,8 @@ #import "FlipperClient.h" #import #import +#import #import -#include -#include #include #import "FlipperClient+Testing.h" #import "FlipperCppWrapperPlugin.h" @@ -32,8 +31,9 @@ using WrapperPlugin = facebook::flipper::FlipperCppWrapperPlugin; @implementation FlipperClient { facebook::flipper::FlipperClient* _cppClient; - folly::ScopedEventBaseThread sonarThread; - folly::ScopedEventBaseThread connectionThread; + std::unique_ptr sonarScheduler; + std::unique_ptr connectionScheduler; + id _certProvider; #if !TARGET_OS_OSX && !TARGET_OS_SIMULATOR && !TARGET_OS_MACCATALYST FKPortForwardingServer* _secureServer; @@ -90,6 +90,10 @@ using WrapperPlugin = facebook::flipper::FlipperCppWrapperPlugin; deviceName = [[NSHost currentHost] localizedName]; #endif + sonarScheduler = + std::make_unique(); + connectionScheduler = + std::make_unique(); static const std::string UNKNOWN = std::string("unknown"); try { facebook::flipper::FlipperClient::init( @@ -102,8 +106,8 @@ using WrapperPlugin = facebook::flipper::FlipperCppWrapperPlugin; [appId UTF8String] ?: UNKNOWN, [privateAppDirectory UTF8String], }, - sonarThread.getEventBase(), - connectionThread.getEventBase(), + sonarScheduler.get(), + connectionScheduler.get(), [SKEnvironmentVariables getInsecurePort], [SKEnvironmentVariables getSecurePort], [SKEnvironmentVariables getAltInsecurePort], diff --git a/iOS/FlipperKit/FlipperWebSocket.h b/iOS/FlipperKit/FlipperWebSocket.h index 68cc2d2e9..8231aa8a4 100644 --- a/iOS/FlipperKit/FlipperWebSocket.h +++ b/iOS/FlipperKit/FlipperWebSocket.h @@ -9,11 +9,11 @@ #pragma once +#import #import #import #import #import -#import #import #import @@ -67,14 +67,14 @@ class FlipperWebSocketProvider : public FlipperSocketProvider { virtual std::unique_ptr create( FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase) override { + Scheduler* scheduler) override { return std::make_unique( std::move(endpoint), std::move(payload)); } virtual std::unique_ptr create( FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase, + Scheduler* scheduler, ConnectionContextStore* connectionContextStore) override { return std::make_unique( std::move(endpoint), std::move(payload), connectionContextStore); diff --git a/xplat/Flipper/FlipperClient.cpp b/xplat/Flipper/FlipperClient.cpp index 09388bc58..5f1e48ea7 100644 --- a/xplat/Flipper/FlipperClient.cpp +++ b/xplat/Flipper/FlipperClient.cpp @@ -8,6 +8,7 @@ #include "FlipperClient.h" #include #include +#include #include #include #include "ConnectionContextStore.h" diff --git a/xplat/Flipper/FlipperClient.h b/xplat/Flipper/FlipperClient.h index c13995acc..e535be99a 100644 --- a/xplat/Flipper/FlipperClient.h +++ b/xplat/Flipper/FlipperClient.h @@ -8,6 +8,7 @@ #pragma once #include +#include #include #include #include "FlipperCertificateProvider.h" diff --git a/xplat/Flipper/FlipperConnectionManagerImpl.cpp b/xplat/Flipper/FlipperConnectionManagerImpl.cpp index ee2dab331..b52b1ed01 100644 --- a/xplat/Flipper/FlipperConnectionManagerImpl.cpp +++ b/xplat/Flipper/FlipperConnectionManagerImpl.cpp @@ -95,8 +95,8 @@ FlipperConnectionManagerImpl::FlipperConnectionManagerImpl( securePort(config.securePort), altInsecurePort(config.altInsecurePort), altSecurePort(config.altSecurePort), - flipperEventBase_(config.callbackWorker), - connectionEventBase_(config.connectionWorker), + flipperScheduler_(config.callbackWorker), + connectionScheduler_(config.connectionWorker), contextStore_(contextStore), implWrapper_(std::make_shared(this)) { CHECK_THROW(config.callbackWorker, std::invalid_argument); @@ -131,13 +131,10 @@ void FlipperConnectionManagerImpl::start() { auto step = flipperState_->start("Start connection thread"); - folly::makeFuture() - .via(flipperEventBase_->getEventBase()) - .delayed(std::chrono::milliseconds(0)) - .thenValue([this, step](auto&&) { - step->complete(); - startSync(); - }); + flipperScheduler_->schedule([this, step]() { + step->complete(); + startSync(); + }); } void FlipperConnectionManagerImpl::startSync() { @@ -210,7 +207,7 @@ bool FlipperConnectionManagerImpl::connectAndExchangeCertificate() { payload->medium = medium; auto newClient = FlipperSocketProvider::socketCreate( - endpoint, std::move(payload), connectionEventBase_); + endpoint, std::move(payload), flipperScheduler_); newClient->setEventHandler(ConnectionEvents(implWrapper_)); auto connectingInsecurely = flipperState_->start("Connect insecurely"); @@ -259,7 +256,7 @@ bool FlipperConnectionManagerImpl::connectSecurely() { payload->csr_path = contextStore_->getCertificateDirectoryPath().c_str(); auto newClient = FlipperSocketProvider::socketCreate( - endpoint, std::move(payload), connectionEventBase_, contextStore_.get()); + endpoint, std::move(payload), connectionScheduler_, contextStore_.get()); newClient->setEventHandler(ConnectionEvents(implWrapper_)); newClient->setMessageHandler([this](const std::string& msg) { std::unique_ptr responder; @@ -294,10 +291,8 @@ void FlipperConnectionManagerImpl::reconnect() { log("Not started"); return; } - folly::makeFuture() - .via(flipperEventBase_->getEventBase()) - .delayed(std::chrono::seconds(reconnectIntervalSeconds)) - .thenValue([this](auto&&) { startSync(); }); + flipperScheduler_->scheduleAfter( + [this]() { startSync(); }, reconnectIntervalSeconds * 1000.0f); } void FlipperConnectionManagerImpl::stop() { @@ -325,7 +320,7 @@ void FlipperConnectionManagerImpl::setCallbacks(Callbacks* callbacks) { } void FlipperConnectionManagerImpl::sendMessage(const folly::dynamic& message) { - flipperEventBase_->add([this, message]() { + flipperScheduler_->schedule([this, message]() { try { if (client_) { client_->send(message, []() {}); @@ -457,11 +452,11 @@ void FlipperConnectionManagerImpl::requestSignedCertificate() { auto gettingCert = flipperState_->start("Getting cert from desktop"); certificateExchangeCompleted_ = false; - flipperEventBase_->add([this, message, gettingCert]() { + flipperScheduler_->schedule([this, message, gettingCert]() { client_->sendExpectResponse( folly::toJson(message), [this, gettingCert](const std::string& response, bool isError) { - flipperEventBase_->add([this, gettingCert, response, isError]() { + flipperScheduler_->schedule([this, gettingCert, response, isError]() { this->processSignedCertificateResponse( gettingCert, response, isError); }); @@ -471,7 +466,7 @@ void FlipperConnectionManagerImpl::requestSignedCertificate() { } bool FlipperConnectionManagerImpl::isRunningInOwnThread() { - return flipperEventBase_->isInEventBaseThread(); + return flipperScheduler_->isRunningInOwnThread(); } } // namespace flipper diff --git a/xplat/Flipper/FlipperConnectionManagerImpl.h b/xplat/Flipper/FlipperConnectionManagerImpl.h index 8861fdbf1..e1653dee1 100644 --- a/xplat/Flipper/FlipperConnectionManagerImpl.h +++ b/xplat/Flipper/FlipperConnectionManagerImpl.h @@ -7,11 +7,10 @@ #pragma once -#include -#include #include #include "FlipperConnectionManager.h" #include "FlipperInitConfig.h" +#include "FlipperScheduler.h" #include "FlipperSocket.h" #include "FlipperState.h" @@ -64,8 +63,8 @@ class FlipperConnectionManagerImpl : public FlipperConnectionManager { int altInsecurePort; int altSecurePort; - folly::EventBase* flipperEventBase_; - folly::EventBase* connectionEventBase_; + Scheduler* flipperScheduler_; + Scheduler* connectionScheduler_; std::unique_ptr client_; diff --git a/xplat/Flipper/FlipperInitConfig.h b/xplat/Flipper/FlipperInitConfig.h index 252318c19..7dd851310 100644 --- a/xplat/Flipper/FlipperInitConfig.h +++ b/xplat/Flipper/FlipperInitConfig.h @@ -7,8 +7,8 @@ #pragma once -#include #include +#include "FlipperScheduler.h" namespace facebook { namespace flipper { @@ -30,14 +30,14 @@ struct FlipperInitConfig { DeviceData deviceData; /** - EventBase on which client callbacks should be called. + Scheduler on which client callbacks should be called. */ - folly::EventBase* callbackWorker; + Scheduler* callbackWorker; /** - EventBase to be used to maintain the network connection. + Scheduler to be used to maintain the network connection. */ - folly::EventBase* connectionWorker; + Scheduler* connectionWorker; int insecurePort = 9089; int securePort = 9088; diff --git a/xplat/Flipper/FlipperSocketProvider.cpp b/xplat/Flipper/FlipperSocketProvider.cpp index 456859903..17c3d4e73 100644 --- a/xplat/Flipper/FlipperSocketProvider.cpp +++ b/xplat/Flipper/FlipperSocketProvider.cpp @@ -21,19 +21,19 @@ std::unique_ptr FlipperSocketProvider::shelvedProvider_ = std::unique_ptr FlipperSocketProvider::socketCreate( FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase) { - return provider_->create(std::move(endpoint), std::move(payload), eventBase); + Scheduler* scheduler) { + return provider_->create(std::move(endpoint), std::move(payload), scheduler); } std::unique_ptr FlipperSocketProvider::socketCreate( FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase, + Scheduler* scheduler, ConnectionContextStore* connectionContextStore) { return provider_->create( std::move(endpoint), std::move(payload), - eventBase, + scheduler, connectionContextStore); } diff --git a/xplat/Flipper/FlipperSocketProvider.h b/xplat/Flipper/FlipperSocketProvider.h index 33875a9e7..8e26f38aa 100644 --- a/xplat/Flipper/FlipperSocketProvider.h +++ b/xplat/Flipper/FlipperSocketProvider.h @@ -7,8 +7,8 @@ #pragma once -#include #include +#include "FlipperScheduler.h" namespace facebook { namespace flipper { @@ -32,35 +32,37 @@ class FlipperSocketProvider { @param endpoint Endpoint to connect to. @param payload Any configuration payload to establish a connection with the specified endpoint. - @param eventBase A folly event base used to execute connection operations. + @param scheduler An scheduler used to schedule and execute connection + operations. */ virtual std::unique_ptr create( FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase) = 0; + Scheduler* scheduler) = 0; /** Create an instance of FlipperSocket. @param endpoint Endpoint to connect to. @param payload Any configuration payload to establish a connection with the specified endpoint. - @param eventBase A folly event base used to execute connection operations. + @param scheduler An scheduler used to schedule and execute connection + operations. @param connectionContextStore A connection context store used for obtaining the certificate used for secure connections. */ virtual std::unique_ptr create( FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase, + Scheduler* scheduler, ConnectionContextStore* connectionContextStore) = 0; static std::unique_ptr socketCreate( FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase); + Scheduler* scheduler); static std::unique_ptr socketCreate( FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase, + Scheduler* scheduler, ConnectionContextStore* connectionContextStore); static void setDefaultProvider( diff --git a/xplat/FlipperTests/FlipperConnectionManagerImplTerminationTests.cpp b/xplat/FlipperTests/FlipperConnectionManagerImplTerminationTests.cpp index 3c51d818b..9ee334257 100644 --- a/xplat/FlipperTests/FlipperConnectionManagerImplTerminationTests.cpp +++ b/xplat/FlipperTests/FlipperConnectionManagerImplTerminationTests.cpp @@ -6,10 +6,11 @@ */ #include +#include #include #include - #include +#include namespace facebook { namespace flipper { @@ -21,12 +22,16 @@ class FlipperConnectionManagerImplTerminationTest : public ::testing::Test { protected: std::shared_ptr state; std::shared_ptr contextStore; + std::unique_ptr sonarScheduler; + std::unique_ptr connectionScheduler; void SetUp() override { // Folly singletons must be registered before they are used. // Without this, test fails in phabricator. folly::SingletonVault::singleton()->registrationComplete(); state = std::make_shared(); contextStore = std::make_shared(); + sonarScheduler = std::make_unique(new EventBase()); + connectionScheduler = std::make_unique(new EventBase()); } }; @@ -35,7 +40,7 @@ TEST_F( testNullEventBaseGetsRejected) { try { auto instance = std::make_shared( - FlipperInitConfig{DeviceData{}, nullptr, new EventBase()}, + FlipperInitConfig{DeviceData{}, nullptr, connectionScheduler.get()}, state, contextStore); FAIL(); @@ -44,7 +49,7 @@ TEST_F( } try { auto instance = std::make_shared( - FlipperInitConfig{DeviceData{}, new EventBase(), nullptr}, + FlipperInitConfig{DeviceData{}, sonarScheduler.get(), nullptr}, state, contextStore); FAIL(); @@ -56,8 +61,8 @@ TEST_F( TEST_F( FlipperConnectionManagerImplTerminationTest, testNonStartedEventBaseDoesntHang) { - auto config = - FlipperInitConfig{DeviceData{}, new EventBase(), new EventBase()}; + auto config = FlipperInitConfig{ + DeviceData{}, sonarScheduler.get(), connectionScheduler.get()}; auto instance = std::make_shared( config, state, contextStore); instance->start(); @@ -72,8 +77,11 @@ TEST_F( std::thread([flipperEventBase]() { flipperEventBase->loopForever(); }); auto connectionThread = std::thread( [connectionEventBase]() { connectionEventBase->loopForever(); }); - auto config = - FlipperInitConfig{DeviceData{}, flipperEventBase, connectionEventBase}; + auto localSonarScheduler = std::make_unique(flipperEventBase); + auto localConnectionScheduler = + std::make_unique(connectionEventBase); + auto config = FlipperInitConfig{ + DeviceData{}, localSonarScheduler.get(), localConnectionScheduler.get()}; auto instance = std::make_shared( config, state, contextStore); diff --git a/xplat/FlipperWebSocket/BaseClient.h b/xplat/FlipperWebSocket/BaseClient.h index 36fd59e8e..053987e88 100644 --- a/xplat/FlipperWebSocket/BaseClient.h +++ b/xplat/FlipperWebSocket/BaseClient.h @@ -9,11 +9,11 @@ #pragma once +#include #include #include #include #include -#include #include #include #include @@ -37,18 +37,18 @@ class BaseClient { BaseClient( FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase) + Scheduler* scheduler) : endpoint_(std::move(endpoint)), payload_(std::move(payload)), - eventBase_(eventBase) {} + scheduler_(scheduler) {} BaseClient( FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase, + Scheduler* scheduler, ConnectionContextStore* connectionContextStore) : endpoint_(std::move(endpoint)), payload_(std::move(payload)), - eventBase_(eventBase), + scheduler_(scheduler), connectionContextStore_(connectionContextStore) {} BaseClient(const BaseClient&) = delete; @@ -84,7 +84,7 @@ class BaseClient { protected: FlipperConnectionEndpoint endpoint_; std::unique_ptr payload_; - folly::EventBase* eventBase_; + Scheduler* scheduler_; ConnectionContextStore* connectionContextStore_; SocketEventHandler eventHandler_; diff --git a/xplat/FlipperWebSocket/FlipperWebSocket.cpp b/xplat/FlipperWebSocket/FlipperWebSocket.cpp index 2d74afbfe..b01dd5618 100644 --- a/xplat/FlipperWebSocket/FlipperWebSocket.cpp +++ b/xplat/FlipperWebSocket/FlipperWebSocket.cpp @@ -14,8 +14,6 @@ #include #include #include -#include -#include #include #include #include @@ -32,24 +30,24 @@ namespace flipper { FlipperWebSocket::FlipperWebSocket( FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase) + Scheduler* scheduler) : FlipperWebSocket( std::move(endpoint), std::move(payload), - eventBase, + scheduler, nullptr) {} FlipperWebSocket::FlipperWebSocket( FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase, + Scheduler* scheduler, ConnectionContextStore* connectionContextStore) { if (endpoint.secure) { socket_ = std::make_unique( - endpoint, std::move(payload), eventBase, connectionContextStore); + endpoint, std::move(payload), scheduler, connectionContextStore); } else { socket_ = std::make_unique( - endpoint, std::move(payload), eventBase, connectionContextStore); + endpoint, std::move(payload), scheduler, connectionContextStore); } } diff --git a/xplat/FlipperWebSocket/FlipperWebSocket.h b/xplat/FlipperWebSocket/FlipperWebSocket.h index ebe202004..700c940bb 100644 --- a/xplat/FlipperWebSocket/FlipperWebSocket.h +++ b/xplat/FlipperWebSocket/FlipperWebSocket.h @@ -9,11 +9,11 @@ #pragma once +#include #include #include #include #include -#include #include #include #include @@ -29,11 +29,11 @@ class FlipperWebSocket : public FlipperSocket { FlipperWebSocket( FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase); + Scheduler* scheduler); FlipperWebSocket( FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase, + Scheduler* scheduler, ConnectionContextStore* connectionContextStore); virtual ~FlipperWebSocket(); @@ -62,19 +62,19 @@ class FlipperWebSocketProvider : public FlipperSocketProvider { virtual std::unique_ptr create( FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase) override { + Scheduler* scheduler) override { return std::make_unique( - std::move(endpoint), std::move(payload), eventBase); + std::move(endpoint), std::move(payload), scheduler); } virtual std::unique_ptr create( FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase, + Scheduler* scheduler, ConnectionContextStore* connectionContextStore) override { return std::make_unique( std::move(endpoint), std::move(payload), - eventBase, + scheduler, connectionContextStore); } }; diff --git a/xplat/FlipperWebSocket/WebSocketClient.cpp b/xplat/FlipperWebSocket/WebSocketClient.cpp index b828a61b3..f50c788c1 100644 --- a/xplat/FlipperWebSocket/WebSocketClient.cpp +++ b/xplat/FlipperWebSocket/WebSocketClient.cpp @@ -14,7 +14,6 @@ #include #include #include -#include #include #include #include @@ -31,22 +30,22 @@ namespace flipper { WebSocketClient::WebSocketClient( FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase) + Scheduler* scheduler) : WebSocketClient( std::move(endpoint), std::move(payload), - eventBase, + scheduler, nullptr) {} WebSocketClient::WebSocketClient( FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase, + Scheduler* scheduler, ConnectionContextStore* connectionContextStore) : BaseClient( std::move(endpoint), std::move(payload), - eventBase, + scheduler, connectionContextStore) { status_ = Status::Unconnected; @@ -148,7 +147,7 @@ void WebSocketClient::disconnect() { thread_->join(); } thread_ = nullptr; - eventBase_->add( + scheduler_->schedule( [eventHandler = eventHandler_]() { eventHandler(SocketEvent::CLOSE); }); } @@ -180,12 +179,12 @@ void WebSocketClient::send( void WebSocketClient::sendExpectResponse( const std::string& message, SocketSendExpectResponseHandler completion) { - connection_->set_message_handler( - [completion, eventBase = eventBase_]( - websocketpp::connection_hdl hdl, SocketClient::message_ptr msg) { - const std::string& payload = msg->get_payload(); - eventBase->add([completion, payload] { completion(payload, false); }); - }); + connection_->set_message_handler([completion, scheduler = scheduler_]( + websocketpp::connection_hdl hdl, + SocketClient::message_ptr msg) { + const std::string& payload = msg->get_payload(); + scheduler->schedule([completion, payload] { completion(payload, false); }); + }); websocketpp::lib::error_code ec; socket_.send( handle_, @@ -205,7 +204,7 @@ void WebSocketClient::onOpen(SocketClient* c, websocketpp::connection_hdl hdl) { } status_ = Status::Initializing; - eventBase_->add( + scheduler_->schedule( [eventHandler = eventHandler_]() { eventHandler(SocketEvent::OPEN); }); } @@ -215,7 +214,7 @@ void WebSocketClient::onMessage( SocketClient::message_ptr msg) { const std::string& payload = msg->get_payload(); if (messageHandler_) { - eventBase_->add([payload, messageHandler = messageHandler_]() { + scheduler_->schedule([payload, messageHandler = messageHandler_]() { messageHandler(payload); }); } @@ -230,7 +229,7 @@ void WebSocketClient::onFail(SocketClient* c, websocketpp::connection_hdl hdl) { connected_.set_value(false); } status_ = Status::Failed; - eventBase_->add( + scheduler_->schedule( [eventHandler = eventHandler_]() { eventHandler(SocketEvent::ERROR); }); } @@ -238,7 +237,7 @@ void WebSocketClient::onClose( SocketClient* c, websocketpp::connection_hdl hdl) { status_ = Status::Closed; - eventBase_->add( + scheduler_->schedule( [eventHandler = eventHandler_]() { eventHandler(SocketEvent::CLOSE); }); } diff --git a/xplat/FlipperWebSocket/WebSocketClient.h b/xplat/FlipperWebSocket/WebSocketClient.h index d08a915c7..47331d7ec 100644 --- a/xplat/FlipperWebSocket/WebSocketClient.h +++ b/xplat/FlipperWebSocket/WebSocketClient.h @@ -9,11 +9,11 @@ #pragma once +#include #include #include #include #include -#include #include #include #include @@ -35,11 +35,11 @@ class WebSocketClient : public BaseClient { WebSocketClient( FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase); + Scheduler* scheduler); WebSocketClient( FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase, + Scheduler* scheduler, ConnectionContextStore* connectionContextStore); WebSocketClient(const WebSocketClient&) = delete; diff --git a/xplat/FlipperWebSocket/WebSocketTLSClient.cpp b/xplat/FlipperWebSocket/WebSocketTLSClient.cpp index f4b029797..24fa9bb49 100644 --- a/xplat/FlipperWebSocket/WebSocketTLSClient.cpp +++ b/xplat/FlipperWebSocket/WebSocketTLSClient.cpp @@ -33,22 +33,22 @@ namespace flipper { WebSocketTLSClient::WebSocketTLSClient( FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase) + Scheduler* scheduler) : WebSocketTLSClient( std::move(endpoint), std::move(payload), - eventBase, + scheduler, nullptr) {} WebSocketTLSClient::WebSocketTLSClient( FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase, + Scheduler* scheduler, ConnectionContextStore* connectionContextStore) : BaseClient( std::move(endpoint), std::move(payload), - eventBase, + scheduler, connectionContextStore) { status_ = Status::Unconnected; @@ -157,7 +157,7 @@ void WebSocketTLSClient::disconnect() { } thread_ = nullptr; - eventBase_->add( + scheduler_->schedule( [eventHandler = eventHandler_]() { eventHandler(SocketEvent::CLOSE); }); } @@ -189,12 +189,12 @@ void WebSocketTLSClient::send( void WebSocketTLSClient::sendExpectResponse( const std::string& message, SocketSendExpectResponseHandler completion) { - connection_->set_message_handler( - [completion, eventBase = eventBase_]( - websocketpp::connection_hdl hdl, SocketTLSClient::message_ptr msg) { - const std::string& payload = msg->get_payload(); - eventBase->add([completion, payload] { completion(payload, false); }); - }); + connection_->set_message_handler([completion, scheduler = scheduler_]( + websocketpp::connection_hdl hdl, + SocketTLSClient::message_ptr msg) { + const std::string& payload = msg->get_payload(); + scheduler->schedule([completion, payload] { completion(payload, false); }); + }); websocketpp::lib::error_code ec; socket_.send( handle_, @@ -216,7 +216,7 @@ void WebSocketTLSClient::onOpen( } status_ = Status::Initializing; - eventBase_->add( + scheduler_->schedule( [eventHandler = eventHandler_]() { eventHandler(SocketEvent::OPEN); }); } @@ -226,7 +226,7 @@ void WebSocketTLSClient::onMessage( SocketTLSClient::message_ptr msg) { const std::string& payload = msg->get_payload(); if (messageHandler_) { - eventBase_->add([payload, messageHandler = messageHandler_]() { + scheduler_->schedule([payload, messageHandler = messageHandler_]() { messageHandler(payload); }); } @@ -257,7 +257,7 @@ void WebSocketTLSClient::onFail( } } status_ = Status::Failed; - eventBase_->add([eventHandler = eventHandler_, sslError]() { + scheduler_->schedule([eventHandler = eventHandler_, sslError]() { if (sslError) { eventHandler(SocketEvent::SSL_ERROR); } else { @@ -270,7 +270,7 @@ void WebSocketTLSClient::onClose( SocketTLSClient* c, websocketpp::connection_hdl hdl) { status_ = Status::Closed; - eventBase_->add( + scheduler_->schedule( [eventHandler = eventHandler_]() { eventHandler(SocketEvent::CLOSE); }); } diff --git a/xplat/FlipperWebSocket/WebSocketTLSClient.h b/xplat/FlipperWebSocket/WebSocketTLSClient.h index 69dfa0abd..398037973 100644 --- a/xplat/FlipperWebSocket/WebSocketTLSClient.h +++ b/xplat/FlipperWebSocket/WebSocketTLSClient.h @@ -13,7 +13,6 @@ #include #include #include -#include #include #include #include @@ -39,11 +38,11 @@ class WebSocketTLSClient : public BaseClient { WebSocketTLSClient( FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase); + Scheduler* scheduler); WebSocketTLSClient( FlipperConnectionEndpoint endpoint, std::unique_ptr payload, - folly::EventBase* eventBase, + Scheduler* scheduler, ConnectionContextStore* connectionContextStore); WebSocketTLSClient(const WebSocketTLSClient&) = delete;