Define boundaries between FlipperConnectionManager and RSocket on the client side

Summary:
These changes abstract RSocket from FlipperConnectionManagerImpl.

This is achieved by defining FlipperSocket.

FlipperConnectionManagerImpl uses instances of FlipperSocket and RSocket is now contained within FlipperRSocket which implements FlipperSocket.

On the changes to follow, FlipperConnectionManagerImpl will no longer reference FlipperRSocket directly thus fully abstracting the socket implementation in use.

For reviewers:
- All of the RSocket code now lives in FlipperRSocket.
- Main changes are in FlipperConnectionManagerImpl. Lambdas are used to deal with events and message handling.
- There's some very minimal serialisation additions for payloads.

Reviewed By: jknoxville

Differential Revision: D30341076

fbshipit-source-id: 54bb4878967378490710c05f729cdd7f4cf08bb8
This commit is contained in:
Lorenzo Blasa
2021-08-17 04:44:11 -07:00
committed by Facebook GitHub Bot
parent 4ae7d9c42b
commit a9c6351cf0
6 changed files with 632 additions and 192 deletions

View File

@@ -9,10 +9,10 @@
#include <folly/Executor.h>
#include <folly/io/async/EventBase.h>
#include <rsocket/RSocket.h>
#include <mutex>
#include "FlipperConnectionManager.h"
#include "FlipperInitConfig.h"
#include "FlipperSocket.h"
#include "FlipperState.h"
namespace facebook {
@@ -22,8 +22,6 @@ class ConnectionEvents;
class ConnectionContextStore;
class FlipperRSocketResponder;
rsocket::Payload toRSocketPayload(folly::dynamic data);
class FlipperConnectionManagerImpl : public FlipperConnectionManager {
friend ConnectionEvents;
@@ -66,13 +64,15 @@ class FlipperConnectionManagerImpl : public FlipperConnectionManager {
folly::EventBase* flipperEventBase_;
folly::EventBase* connectionEventBase_;
std::unique_ptr<rsocket::RSocketClient> client_;
std::unique_ptr<FlipperSocket> client_;
bool connectionIsTrusted_;
int failedConnectionAttempts_ = 0;
std::shared_ptr<ConnectionContextStore> contextStore_;
void startSync();
bool doCertificateExchange();
bool connectAndExchangeCertificate();
bool connectSecurely();
bool isCertificateExchangeNeeded();
void requestSignedCertFromFlipper();