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:
committed by
Facebook GitHub Bot
parent
ef6e802244
commit
cf1d579462
@@ -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);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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];
|
||||||
|
|||||||
Reference in New Issue
Block a user