diff --git a/xplat/Flipper/FlipperConnectionImpl.cpp b/xplat/Flipper/FlipperConnectionImpl.cpp new file mode 100644 index 00000000000..41c2746635f --- /dev/null +++ b/xplat/Flipper/FlipperConnectionImpl.cpp @@ -0,0 +1,89 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#include "FlipperConnectionImpl.h" + +namespace facebook { +namespace flipper { + +FlipperConnectionImpl::FlipperConnectionImpl( + FlipperConnectionManager* socket, + const std::string& name) + : socket_(socket), name_(name) {} + +void FlipperConnectionImpl::call( + const std::string& method, + const folly::dynamic& params, + std::shared_ptr responder) { + if (receivers_.find(method) == receivers_.end()) { + std::string errorMessage = "Receiver " + method + " not found."; + log("Error: " + errorMessage); + responder->error(folly::dynamic::object("message", errorMessage)); + return; + } + try { + receivers_.at(method)(params, responder); + } catch (const std::exception& ex) { + std::string errorMessage = "Receiver " + method + " failed with error. "; + std::string reason = ex.what(); + errorMessage += "Error: '" + reason + "'."; + log("Error: " + errorMessage); + responder->error(folly::dynamic::object("message", errorMessage)); + } +} + +void FlipperConnectionImpl::send( + const std::string& method, + const folly::dynamic& params) { + folly::dynamic message = folly::dynamic::object("method", "execute")( + "params", + folly::dynamic::object("api", name_)("method", method)("params", params)); + socket_->sendMessage(message); +} + +void FlipperConnectionImpl::sendRaw( + const std::string& method, + const std::string& params) { + std::stringstream ss; + ss << "{" + "\"method\": \"execute\"," + "\"params\": {" + "\"api\": \"" + << name_ + << "\"," + "\"method\": \"" + << method + << "\"," + "\"params\":" + << params << "}}"; + auto message = ss.str(); + socket_->sendMessageRaw(message); +} + +void FlipperConnectionImpl::error( + const std::string& message, + const std::string& stacktrace) { + socket_->sendMessage(folly::dynamic::object( + "error", + folly::dynamic::object("message", message)("stacktrace", stacktrace))); +} + +void FlipperConnectionImpl::receive( + const std::string& method, + const FlipperReceiver& receiver) { + receivers_[method] = receiver; +} + +/** +Runtime check which receivers are supported for this app +*/ +bool FlipperConnectionImpl::hasReceiver(const std::string& method) { + return receivers_.find(method) != receivers_.end(); +} + +} // namespace flipper +} // namespace facebook diff --git a/xplat/Flipper/FlipperConnectionImpl.h b/xplat/Flipper/FlipperConnectionImpl.h index f4cde7dded2..3e30b2d08ad 100644 --- a/xplat/Flipper/FlipperConnectionImpl.h +++ b/xplat/Flipper/FlipperConnectionImpl.h @@ -21,73 +21,27 @@ class FlipperConnectionImpl : public FlipperConnection { public: FlipperConnectionImpl( FlipperConnectionManager* socket, - const std::string& name) - : socket_(socket), name_(name) {} + const std::string& name); void call( const std::string& method, const folly::dynamic& params, - std::shared_ptr responder) { - if (receivers_.find(method) == receivers_.end()) { - std::string errorMessage = "Receiver " + method + " not found."; - log("Error: " + errorMessage); - responder->error(folly::dynamic::object("message", errorMessage)); - return; - } - try { - receivers_.at(method)(params, responder); - } catch (const std::exception& ex) { - std::string errorMessage = "Receiver " + method + " failed with error. "; - std::string reason = ex.what(); - errorMessage += "Error: '" + reason + "'."; - log("Error: " + errorMessage); - responder->error(folly::dynamic::object("message", errorMessage)); - } - } + std::shared_ptr responder); - void send(const std::string& method, const folly::dynamic& params) override { - folly::dynamic message = folly::dynamic::object("method", "execute")( - "params", - folly::dynamic::object("api", name_)("method", method)( - "params", params)); - socket_->sendMessage(message); - } + void send(const std::string& method, const folly::dynamic& params) override; - void sendRaw(const std::string& method, const std::string& params) override { - std::stringstream ss; - ss << "{" - "\"method\": \"execute\"," - "\"params\": {" - "\"api\": \"" - << name_ - << "\"," - "\"method\": \"" - << method - << "\"," - "\"params\":" - << params << "}}"; - auto message = ss.str(); - socket_->sendMessageRaw(message); - } + void sendRaw(const std::string& method, const std::string& params) override; void error(const std::string& message, const std::string& stacktrace) - override { - socket_->sendMessage(folly::dynamic::object( - "error", - folly::dynamic::object("message", message)("stacktrace", stacktrace))); - } + override; void receive(const std::string& method, const FlipperReceiver& receiver) - override { - receivers_[method] = receiver; - } + override; /** - Runtime check which receivers are supported for this app - */ - bool hasReceiver(const std::string& method) { - return receivers_.find(method) != receivers_.end(); - } + * Runtime check which receivers are supported for this app + */ + bool hasReceiver(const std::string& method); private: FlipperConnectionManager* socket_;