Manual disconnect on deallocation and do not clear message handler or message received

Summary:
Trigger a manual disconnect on deallocation. This was done automatically for us when the underlying socket gets released. But, this gives a bit more visibility and control onto exactly when this is going to take place.

Additionally, do not clear the message handler when a message is received.

It is not required as sendExpectResponse is one time called only used for certificate exchange. If this takes place again, a new handler will be set anyway.

Reviewed By: passy

Differential Revision: D31231828

fbshipit-source-id: 36ad13564a358b88d1618e94195fe05433d80993
This commit is contained in:
Lorenzo Blasa
2021-09-29 07:43:01 -07:00
committed by Facebook GitHub Bot
parent ef6e802244
commit cf1d579462
2 changed files with 13 additions and 22 deletions

View File

@@ -28,15 +28,13 @@ class FlipperWebSocket : public FlipperSocket {
public: public:
FlipperWebSocket( FlipperWebSocket(
FlipperConnectionEndpoint endpoint, FlipperConnectionEndpoint endpoint,
std::unique_ptr<FlipperSocketBasePayload> payload, std::unique_ptr<FlipperSocketBasePayload> payload);
folly::EventBase* eventBase);
FlipperWebSocket( FlipperWebSocket(
FlipperConnectionEndpoint endpoint, FlipperConnectionEndpoint endpoint,
std::unique_ptr<FlipperSocketBasePayload> payload, std::unique_ptr<FlipperSocketBasePayload> payload,
folly::EventBase* eventBase,
ConnectionContextStore* connectionContextStore); ConnectionContextStore* connectionContextStore);
virtual ~FlipperWebSocket() {} virtual ~FlipperWebSocket();
virtual void setEventHandler(SocketEventHandler eventHandler) override; virtual void setEventHandler(SocketEventHandler eventHandler) override;
virtual void setMessageHandler(SocketMessageHandler messageHandler) override; virtual void setMessageHandler(SocketMessageHandler messageHandler) override;
@@ -55,13 +53,12 @@ class FlipperWebSocket : public FlipperSocket {
private: private:
FlipperConnectionEndpoint endpoint_; FlipperConnectionEndpoint endpoint_;
std::unique_ptr<FlipperSocketBasePayload> payload_; std::unique_ptr<FlipperSocketBasePayload> payload_;
folly::EventBase* eventBase_;
ConnectionContextStore* connectionContextStore_; ConnectionContextStore* connectionContextStore_;
FlipperPlatformWebSocket* socket_;
SocketEventHandler eventHandler_; SocketEventHandler eventHandler_;
SocketMessageHandler messageHandler_; SocketMessageHandler messageHandler_;
FlipperPlatformWebSocket* socket_;
}; };
class FlipperWebSocketProvider : public FlipperSocketProvider { class FlipperWebSocketProvider : public FlipperSocketProvider {
@@ -72,7 +69,7 @@ class FlipperWebSocketProvider : public FlipperSocketProvider {
std::unique_ptr<FlipperSocketBasePayload> payload, std::unique_ptr<FlipperSocketBasePayload> payload,
folly::EventBase* eventBase) override { folly::EventBase* eventBase) override {
return std::make_unique<FlipperWebSocket>( return std::make_unique<FlipperWebSocket>(
std::move(endpoint), std::move(payload), eventBase); std::move(endpoint), std::move(payload));
} }
virtual std::unique_ptr<FlipperSocket> create( virtual std::unique_ptr<FlipperSocket> create(
FlipperConnectionEndpoint endpoint, FlipperConnectionEndpoint endpoint,
@@ -80,10 +77,7 @@ class FlipperWebSocketProvider : public FlipperSocketProvider {
folly::EventBase* eventBase, folly::EventBase* eventBase,
ConnectionContextStore* connectionContextStore) override { ConnectionContextStore* connectionContextStore) override {
return std::make_unique<FlipperWebSocket>( return std::make_unique<FlipperWebSocket>(
std::move(endpoint), std::move(endpoint), std::move(payload), connectionContextStore);
std::move(payload),
eventBase,
connectionContextStore);
} }
}; };

View File

@@ -92,22 +92,21 @@ class WebSocketSerializer : public FlipperPayloadSerializer {
FlipperWebSocket::FlipperWebSocket( FlipperWebSocket::FlipperWebSocket(
FlipperConnectionEndpoint endpoint, FlipperConnectionEndpoint endpoint,
std::unique_ptr<FlipperSocketBasePayload> payload, std::unique_ptr<FlipperSocketBasePayload> payload)
folly::EventBase* eventBase) : endpoint_(std::move(endpoint)), payload_(std::move(payload)) {}
: endpoint_(std::move(endpoint)),
payload_(std::move(payload)),
eventBase_(eventBase) {}
FlipperWebSocket::FlipperWebSocket( FlipperWebSocket::FlipperWebSocket(
FlipperConnectionEndpoint endpoint, FlipperConnectionEndpoint endpoint,
std::unique_ptr<FlipperSocketBasePayload> payload, std::unique_ptr<FlipperSocketBasePayload> payload,
folly::EventBase* eventBase,
ConnectionContextStore* connectionContextStore) ConnectionContextStore* connectionContextStore)
: endpoint_(std::move(endpoint)), : endpoint_(std::move(endpoint)),
payload_(std::move(payload)), payload_(std::move(payload)),
eventBase_(eventBase),
connectionContextStore_(connectionContextStore) {} connectionContextStore_(connectionContextStore) {}
FlipperWebSocket::~FlipperWebSocket() {
disconnect();
}
void FlipperWebSocket::setEventHandler(SocketEventHandler eventHandler) { void FlipperWebSocket::setEventHandler(SocketEventHandler eventHandler) {
eventHandler_ = std::move(eventHandler); eventHandler_ = std::move(eventHandler);
} }
@@ -169,8 +168,7 @@ bool FlipperWebSocket::connect(FlipperConnectionManager* manager) {
promise.set_value(false); promise.set_value(false);
} }
} }
eventBase_->runInEventBaseThread( eventHandler(event);
[eventHandler, event]() { eventHandler(event); });
}; };
socket_.messageHandler = ^(const std::string& message) { socket_.messageHandler = ^(const std::string& message) {
this->messageHandler_(message); this->messageHandler_(message);
@@ -240,7 +238,6 @@ void FlipperWebSocket::sendExpectResponse(
[socket_ setMessageHandler:^(const std::string& msg) { [socket_ setMessageHandler:^(const std::string& msg) {
completion(msg, false); completion(msg, false);
[socket_ setMessageHandler:NULL];
}]; }];
NSError* error = NULL; NSError* error = NULL;
[socket_ send:messageObjc error:&error]; [socket_ send:messageObjc error:&error];