Partially remove dependency on folly async
Summary: This change isolates the usage of folly async from Flipper. Is now self-contained in Flipper Folly schedulers. Users of Flipper can decide not to use the types defined in that header and implement their own. NOTE: changes are minimal, we are just replacing direct calls to folly event base with a scheduler which simply relays this on to folly. Reviewed By: fabiomassimo Differential Revision: D36626483 fbshipit-source-id: add0241caf4af0aa5c3b5c2e7efc2e725f5400ab
This commit is contained in:
committed by
Facebook GitHub Bot
parent
9c7850604c
commit
e44cad5e99
@@ -9,11 +9,11 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <Flipper/FlipperScheduler.h>
|
||||
#include <Flipper/FlipperSocket.h>
|
||||
#include <Flipper/FlipperSocketProvider.h>
|
||||
#include <Flipper/FlipperTransportTypes.h>
|
||||
#include <folly/dynamic.h>
|
||||
#include <folly/io/async/EventBase.h>
|
||||
#include <future>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
@@ -37,18 +37,18 @@ class BaseClient {
|
||||
BaseClient(
|
||||
FlipperConnectionEndpoint endpoint,
|
||||
std::unique_ptr<FlipperSocketBasePayload> payload,
|
||||
folly::EventBase* eventBase)
|
||||
Scheduler* scheduler)
|
||||
: endpoint_(std::move(endpoint)),
|
||||
payload_(std::move(payload)),
|
||||
eventBase_(eventBase) {}
|
||||
scheduler_(scheduler) {}
|
||||
BaseClient(
|
||||
FlipperConnectionEndpoint endpoint,
|
||||
std::unique_ptr<FlipperSocketBasePayload> 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<FlipperSocketBasePayload> payload_;
|
||||
folly::EventBase* eventBase_;
|
||||
Scheduler* scheduler_;
|
||||
ConnectionContextStore* connectionContextStore_;
|
||||
|
||||
SocketEventHandler eventHandler_;
|
||||
|
||||
@@ -14,8 +14,6 @@
|
||||
#include <Flipper/Log.h>
|
||||
#include <folly/String.h>
|
||||
#include <folly/futures/Future.h>
|
||||
#include <folly/io/async/AsyncSocketException.h>
|
||||
#include <folly/io/async/SSLContext.h>
|
||||
#include <folly/json.h>
|
||||
#include <cctype>
|
||||
#include <iomanip>
|
||||
@@ -32,24 +30,24 @@ namespace flipper {
|
||||
FlipperWebSocket::FlipperWebSocket(
|
||||
FlipperConnectionEndpoint endpoint,
|
||||
std::unique_ptr<FlipperSocketBasePayload> payload,
|
||||
folly::EventBase* eventBase)
|
||||
Scheduler* scheduler)
|
||||
: FlipperWebSocket(
|
||||
std::move(endpoint),
|
||||
std::move(payload),
|
||||
eventBase,
|
||||
scheduler,
|
||||
nullptr) {}
|
||||
|
||||
FlipperWebSocket::FlipperWebSocket(
|
||||
FlipperConnectionEndpoint endpoint,
|
||||
std::unique_ptr<FlipperSocketBasePayload> payload,
|
||||
folly::EventBase* eventBase,
|
||||
Scheduler* scheduler,
|
||||
ConnectionContextStore* connectionContextStore) {
|
||||
if (endpoint.secure) {
|
||||
socket_ = std::make_unique<WebSocketTLSClient>(
|
||||
endpoint, std::move(payload), eventBase, connectionContextStore);
|
||||
endpoint, std::move(payload), scheduler, connectionContextStore);
|
||||
} else {
|
||||
socket_ = std::make_unique<WebSocketClient>(
|
||||
endpoint, std::move(payload), eventBase, connectionContextStore);
|
||||
endpoint, std::move(payload), scheduler, connectionContextStore);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,11 +9,11 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <Flipper/FlipperScheduler.h>
|
||||
#include <Flipper/FlipperSocket.h>
|
||||
#include <Flipper/FlipperSocketProvider.h>
|
||||
#include <Flipper/FlipperTransportTypes.h>
|
||||
#include <folly/dynamic.h>
|
||||
#include <folly/io/async/EventBase.h>
|
||||
#include <future>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
@@ -29,11 +29,11 @@ class FlipperWebSocket : public FlipperSocket {
|
||||
FlipperWebSocket(
|
||||
FlipperConnectionEndpoint endpoint,
|
||||
std::unique_ptr<FlipperSocketBasePayload> payload,
|
||||
folly::EventBase* eventBase);
|
||||
Scheduler* scheduler);
|
||||
FlipperWebSocket(
|
||||
FlipperConnectionEndpoint endpoint,
|
||||
std::unique_ptr<FlipperSocketBasePayload> payload,
|
||||
folly::EventBase* eventBase,
|
||||
Scheduler* scheduler,
|
||||
ConnectionContextStore* connectionContextStore);
|
||||
|
||||
virtual ~FlipperWebSocket();
|
||||
@@ -62,19 +62,19 @@ class FlipperWebSocketProvider : public FlipperSocketProvider {
|
||||
virtual std::unique_ptr<FlipperSocket> create(
|
||||
FlipperConnectionEndpoint endpoint,
|
||||
std::unique_ptr<FlipperSocketBasePayload> payload,
|
||||
folly::EventBase* eventBase) override {
|
||||
Scheduler* scheduler) override {
|
||||
return std::make_unique<FlipperWebSocket>(
|
||||
std::move(endpoint), std::move(payload), eventBase);
|
||||
std::move(endpoint), std::move(payload), scheduler);
|
||||
}
|
||||
virtual std::unique_ptr<FlipperSocket> create(
|
||||
FlipperConnectionEndpoint endpoint,
|
||||
std::unique_ptr<FlipperSocketBasePayload> payload,
|
||||
folly::EventBase* eventBase,
|
||||
Scheduler* scheduler,
|
||||
ConnectionContextStore* connectionContextStore) override {
|
||||
return std::make_unique<FlipperWebSocket>(
|
||||
std::move(endpoint),
|
||||
std::move(payload),
|
||||
eventBase,
|
||||
scheduler,
|
||||
connectionContextStore);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
#include <Flipper/Log.h>
|
||||
#include <folly/String.h>
|
||||
#include <folly/futures/Future.h>
|
||||
#include <folly/io/async/SSLContext.h>
|
||||
#include <folly/json.h>
|
||||
#include <websocketpp/common/memory.hpp>
|
||||
#include <websocketpp/common/thread.hpp>
|
||||
@@ -31,22 +30,22 @@ namespace flipper {
|
||||
WebSocketClient::WebSocketClient(
|
||||
FlipperConnectionEndpoint endpoint,
|
||||
std::unique_ptr<FlipperSocketBasePayload> payload,
|
||||
folly::EventBase* eventBase)
|
||||
Scheduler* scheduler)
|
||||
: WebSocketClient(
|
||||
std::move(endpoint),
|
||||
std::move(payload),
|
||||
eventBase,
|
||||
scheduler,
|
||||
nullptr) {}
|
||||
|
||||
WebSocketClient::WebSocketClient(
|
||||
FlipperConnectionEndpoint endpoint,
|
||||
std::unique_ptr<FlipperSocketBasePayload> 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); });
|
||||
}
|
||||
|
||||
|
||||
@@ -9,11 +9,11 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <Flipper/FlipperScheduler.h>
|
||||
#include <Flipper/FlipperSocket.h>
|
||||
#include <Flipper/FlipperSocketProvider.h>
|
||||
#include <Flipper/FlipperTransportTypes.h>
|
||||
#include <folly/dynamic.h>
|
||||
#include <folly/io/async/EventBase.h>
|
||||
#include <future>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
@@ -35,11 +35,11 @@ class WebSocketClient : public BaseClient {
|
||||
WebSocketClient(
|
||||
FlipperConnectionEndpoint endpoint,
|
||||
std::unique_ptr<FlipperSocketBasePayload> payload,
|
||||
folly::EventBase* eventBase);
|
||||
Scheduler* scheduler);
|
||||
WebSocketClient(
|
||||
FlipperConnectionEndpoint endpoint,
|
||||
std::unique_ptr<FlipperSocketBasePayload> payload,
|
||||
folly::EventBase* eventBase,
|
||||
Scheduler* scheduler,
|
||||
ConnectionContextStore* connectionContextStore);
|
||||
|
||||
WebSocketClient(const WebSocketClient&) = delete;
|
||||
|
||||
@@ -33,22 +33,22 @@ namespace flipper {
|
||||
WebSocketTLSClient::WebSocketTLSClient(
|
||||
FlipperConnectionEndpoint endpoint,
|
||||
std::unique_ptr<FlipperSocketBasePayload> payload,
|
||||
folly::EventBase* eventBase)
|
||||
Scheduler* scheduler)
|
||||
: WebSocketTLSClient(
|
||||
std::move(endpoint),
|
||||
std::move(payload),
|
||||
eventBase,
|
||||
scheduler,
|
||||
nullptr) {}
|
||||
|
||||
WebSocketTLSClient::WebSocketTLSClient(
|
||||
FlipperConnectionEndpoint endpoint,
|
||||
std::unique_ptr<FlipperSocketBasePayload> 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); });
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
#include <Flipper/FlipperSocketProvider.h>
|
||||
#include <Flipper/FlipperTransportTypes.h>
|
||||
#include <folly/dynamic.h>
|
||||
#include <folly/io/async/EventBase.h>
|
||||
#include <future>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
@@ -39,11 +38,11 @@ class WebSocketTLSClient : public BaseClient {
|
||||
WebSocketTLSClient(
|
||||
FlipperConnectionEndpoint endpoint,
|
||||
std::unique_ptr<FlipperSocketBasePayload> payload,
|
||||
folly::EventBase* eventBase);
|
||||
Scheduler* scheduler);
|
||||
WebSocketTLSClient(
|
||||
FlipperConnectionEndpoint endpoint,
|
||||
std::unique_ptr<FlipperSocketBasePayload> payload,
|
||||
folly::EventBase* eventBase,
|
||||
Scheduler* scheduler,
|
||||
ConnectionContextStore* connectionContextStore);
|
||||
|
||||
WebSocketTLSClient(const WebSocketTLSClient&) = delete;
|
||||
|
||||
Reference in New Issue
Block a user