Add isMethodSupported handler

Summary: Allows plugin to check if something is supported by that app, for example an extension command or a new feature, before trying to use it.

Reviewed By: passy

Differential Revision: D14225957

fbshipit-source-id: 3c5a29a06b56fe5f1da772824232547447872344
This commit is contained in:
John Knox
2019-02-26 10:00:57 -08:00
committed by Facebook Github Bot
parent dbb4fa1191
commit 40ada838d7
3 changed files with 24 additions and 1 deletions

View File

@@ -231,6 +231,22 @@ void FlipperClient::onMessageReceived(
return; return;
} }
if (method == "isMethodSupported") {
const auto identifier = params["api"].getString();
if (connections_.find(identifier) == connections_.end()) {
std::string errorMessage = "Connection " + identifier +
" not found for method " + method.getString();
log(errorMessage);
responder->error(folly::dynamic::object("message", errorMessage)(
"name", "ConnectionNotFound"));
return;
}
const auto& conn = connections_.at(params["api"].getString());
bool isSupported = conn->hasReceiver(params["method"].getString());
responder->success(dynamic::object("isSupported", isSupported));
return;
}
dynamic response = dynamic response =
dynamic::object("message", "Received unknown method: " + method); dynamic::object("message", "Received unknown method: " + method);
responder->error(response); responder->error(response);

View File

@@ -53,6 +53,13 @@ class FlipperConnectionImpl : public FlipperConnection {
receivers_[method] = receiver; receivers_[method] = receiver;
} }
/**
Runtime check which receivers are supported for this app
*/
bool hasReceiver(const std::string& method) {
return receivers_.find(method) != receivers_.end();
}
private: private:
FlipperConnectionManager* socket_; FlipperConnectionManager* socket_;
std::string name_; std::string name_;

View File

@@ -34,7 +34,7 @@ static constexpr int maxPayloadSize = 0xFFFFFF;
// Not a public-facing version number. // Not a public-facing version number.
// Used for compatibility checking with desktop flipper. // Used for compatibility checking with desktop flipper.
// To be bumped for every core platform interface change. // To be bumped for every core platform interface change.
static constexpr int sdkVersion = 1; static constexpr int sdkVersion = 2;
namespace facebook { namespace facebook {
namespace flipper { namespace flipper {