From b9bf520e1583539ffb607fa1ecc60fec0dd07543 Mon Sep 17 00:00:00 2001 From: Nicolas Pope <nicolas.pope@utu.fi> Date: Thu, 16 Jun 2022 07:32:08 +0000 Subject: [PATCH] #48 Add service provider --- CMakeLists.txt | 1 + include/ftl/protocol/self.hpp | 11 +++++++++++ include/ftl/protocol/service.hpp | 21 +++++++++++++++++++++ src/protocol.cpp | 6 +++--- src/self.cpp | 5 +++++ src/service.cpp | 14 ++++++++++++++ test/rpc_integration.cpp | 3 ++- 7 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 include/ftl/protocol/service.hpp create mode 100644 src/service.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 5261bea..e9c31bc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -192,6 +192,7 @@ add_library(beyond-protocol STATIC src/protocol.cpp src/rpc.cpp src/channelUtils.cpp + src/service.cpp ) target_include_directories(beyond-protocol PUBLIC diff --git a/include/ftl/protocol/self.hpp b/include/ftl/protocol/self.hpp index d73bbd1..ad3ba19 100644 --- a/include/ftl/protocol/self.hpp +++ b/include/ftl/protocol/self.hpp @@ -25,6 +25,7 @@ namespace protocol { class Node; class Stream; +class Service; /** * @brief A wrapper providing RPC API and local node management. Internally the @@ -48,6 +49,16 @@ class Self { */ std::shared_ptr<ftl::protocol::Node> connectNode(const std::string &uri); + /** + * @brief Connect to the web service. + * + * Only one service connection is allowed per self object. + * + * @param uri + * @return std::shared_ptr<ftl::protocol::Service> + */ + std::shared_ptr<ftl::protocol::Service> connectService(const std::string &uri); + /** * @brief Create a new stream. Use the namespace method if possible. * diff --git a/include/ftl/protocol/service.hpp b/include/ftl/protocol/service.hpp new file mode 100644 index 0000000..72cd4a9 --- /dev/null +++ b/include/ftl/protocol/service.hpp @@ -0,0 +1,21 @@ +/** + * @file service.hpp + * @copyright Copyright (c) 2022 University of Turku, MIT License + * @author Nicolas Pope + */ + +#pragma once + +#include <ftl/protocol/node.hpp> + +namespace ftl { +namespace protocol { + +class Service: public ftl::protocol::Node { + public: + explicit Service(const ftl::net::PeerPtr &impl); + virtual ~Service(); +}; + +} // namespace protocol +} // namespace ftl diff --git a/src/protocol.cpp b/src/protocol.cpp index 012198d..32291fc 100644 --- a/src/protocol.cpp +++ b/src/protocol.cpp @@ -36,9 +36,9 @@ std::shared_ptr<ftl::protocol::Self> ftl::createDummySelf() { return std::make_shared<ftl::protocol::Self>(u); } -/*std::shared_ptr<ftl::protocol::Service> ftl::setServiceProvider(const std::string &uri) { - -}*/ +std::shared_ptr<ftl::protocol::Service> ftl::setServiceProvider(const std::string &uri) { + return getSelf()->connectService(uri); +} std::shared_ptr<ftl::protocol::Node> ftl::connectNode(const std::string &uri) { return getSelf()->connectNode(uri); diff --git a/src/self.cpp b/src/self.cpp index 627646b..7331266 100644 --- a/src/self.cpp +++ b/src/self.cpp @@ -6,6 +6,7 @@ #include "universe.hpp" #include <ftl/protocol/self.hpp> +#include <ftl/protocol/service.hpp> #include "./streams/netstream.hpp" #include "./streams/filestream.hpp" #include <ftl/protocol/muxer.hpp> @@ -24,6 +25,10 @@ std::shared_ptr<ftl::protocol::Node> Self::connectNode(const std::string &uri) { return std::make_shared<ftl::protocol::Node>(universe_->connect(uri)); } +std::shared_ptr<ftl::protocol::Service> Self::connectService(const std::string &uri) { + return std::make_shared<ftl::protocol::Service>(universe_->connect(uri)); +} + std::shared_ptr<ftl::protocol::Stream> Self::createStream(const std::string &uri) { ftl::URI u(uri); diff --git a/src/service.cpp b/src/service.cpp new file mode 100644 index 0000000..1de41d4 --- /dev/null +++ b/src/service.cpp @@ -0,0 +1,14 @@ +/** + * @file service.cpp + * @copyright Copyright (c) 2022 University of Turku, MIT License + * @author Nicolas Pope + */ + +#include <ftl/protocol/service.hpp> + +using ftl::protocol::Service; +using ftl::protocol::Node; + +Service::Service(const ftl::net::PeerPtr &impl): Node(impl) {} + +Service::~Service() {} diff --git a/test/rpc_integration.cpp b/test/rpc_integration.cpp index 1ea1ad3..e0c0b7e 100644 --- a/test/rpc_integration.cpp +++ b/test/rpc_integration.cpp @@ -2,6 +2,7 @@ #include <ftl/protocol.hpp> #include <ftl/protocol/self.hpp> #include <ftl/protocol/node.hpp> +#include <ftl/protocol/service.hpp> #include <ftl/uri.hpp> #include <ftl/exception.hpp> #include <ftl/lib/nlohmann/json.hpp> @@ -50,7 +51,7 @@ TEST_CASE("RPC List Streams", "[rpc]") { { auto uri = "tcp://127.0.0.1:" + std::to_string(self->getListeningURIs().front().getPort()); LOG(INFO) << uri; - auto p = ftl::connectNode(uri); + auto p = ftl::setServiceProvider(uri); REQUIRE(p); REQUIRE(p->waitConnection(5)); REQUIRE(self->waitConnections(5) == 1); -- GitLab