From 690caf5c66f6fbc0e4a4f39ff75e280040b9d67c Mon Sep 17 00:00:00 2001 From: Jonas Vautherin Date: Thu, 1 Mar 2018 15:39:23 +0100 Subject: [PATCH] backend: make a pImpl out of DroneCoreBackend --- grpc/server/src/backend.cpp | 76 +++++++++++++++++++---------- grpc/server/src/backend.h | 20 +++----- grpc/server/src/core/corerpc_impl.h | 1 + 3 files changed, 57 insertions(+), 40 deletions(-) diff --git a/grpc/server/src/backend.cpp b/grpc/server/src/backend.cpp index bcb51b236b..783c9f75c5 100644 --- a/grpc/server/src/backend.cpp +++ b/grpc/server/src/backend.cpp @@ -5,9 +5,12 @@ #include #include #include +#include #include "action/actionrpc_impl.h" +#include "connection_initiator.h" #include "core/corerpc_impl.h" +#include "dronecore.h" #include "log.h" #include "mission/missionrpc_impl.h" #include "telemetry/telemetryrpc_impl.h" @@ -15,42 +18,61 @@ namespace dronecore { namespace backend { -bool DroneCoreBackend::run(const int mavlink_listen_port) +class DroneCoreBackend::Impl { - _connection_initiator.start(_dc, 14540); - _connection_initiator.wait(); +public: + Impl() {} + ~Impl() {} - grpc::ServerBuilder builder; - setup_port(builder); + bool run(const int mavlink_listen_port) + { + _connection_initiator.start(_dc, 14540); + _connection_initiator.wait(); - CoreServiceImpl core(_dc); - builder.RegisterService(&core); + grpc::ServerBuilder builder; + setup_port(builder); - Action action(&_dc.device()); - ActionServiceImpl actionService(action); - builder.RegisterService(&actionService); + CoreServiceImpl core(_dc); + builder.RegisterService(&core); - Mission mission(&_dc.device()); - MissionServiceImpl missionService(mission); - builder.RegisterService(&missionService); + Action action(&_dc.device()); + ActionServiceImpl actionService(action); + builder.RegisterService(&actionService); - Telemetry telemetry(&_dc.device()); - TelemetryServiceImpl telemetryService(telemetry); - builder.RegisterService(&telemetryService); + Mission mission(&_dc.device()); + MissionServiceImpl missionService(mission); + builder.RegisterService(&missionService); - _server = builder.BuildAndStart(); - LogInfo() << "Server started"; - _server->Wait(); + Telemetry telemetry(&_dc.device()); + TelemetryServiceImpl telemetryService(telemetry); + builder.RegisterService(&telemetryService); - return true; -} + _server = builder.BuildAndStart(); + LogInfo() << "Server started"; + _server->Wait(); -void DroneCoreBackend::setup_port(grpc::ServerBuilder &builder) -{ - std::string server_address("0.0.0.0:50051"); - builder.AddListeningPort(server_address, grpc::InsecureServerCredentials()); - LogInfo() << "Server set to listen on " << server_address; -} + return true; + } + +private: + void setup_port(grpc::ServerBuilder &builder) + { + std::string server_address("0.0.0.0:50051"); + builder.AddListeningPort(server_address, grpc::InsecureServerCredentials()); + LogInfo() << "Server set to listen on " << server_address; + } + + dronecore::DroneCore _dc; + dronecore::backend::ConnectionInitiator _connection_initiator; + std::unique_ptr server; +}; + +DroneCoreBackend::DroneCoreBackend() : _impl(new Impl()) {} +DroneCoreBackend::~DroneCoreBackend() = default; +DroneCoreBackend::DroneCoreBackend(DroneCoreBackend &&) noexcept = default; +DroneCoreBackend &DroneCoreBackend::operator=(DroneCoreBackend &&) noexcept = default; + +bool DroneCoreBackend::run(const int mavlink_listen_port) { return _impl->run(mavlink_listen_port); } } // namespace backend } //namespace dronecore diff --git a/grpc/server/src/backend.h b/grpc/server/src/backend.h index cf94a20adc..5e151d1f7f 100644 --- a/grpc/server/src/backend.h +++ b/grpc/server/src/backend.h @@ -1,9 +1,4 @@ -#include #include -#include - -#include "connection_initiator.h" -#include "dronecore.h" namespace dronecore { namespace backend { @@ -11,18 +6,17 @@ namespace backend { class DroneCoreBackend { public: - DroneCoreBackend() {} - ~DroneCoreBackend() {} + DroneCoreBackend(); + ~DroneCoreBackend(); + + DroneCoreBackend(DroneCoreBackend &&op) noexcept; + DroneCoreBackend &operator=(DroneCoreBackend &&op) noexcept; bool run(const int mavlink_listen_port = 14540); private: - bool run_server(); - void setup_port(grpc::ServerBuilder &builder); - - dronecore::DroneCore _dc; - dronecore::backend::ConnectionInitiator _connection_initiator; - std::unique_ptr _server; + class Impl; + std::unique_ptr _impl; }; } // namespace backend diff --git a/grpc/server/src/core/corerpc_impl.h b/grpc/server/src/core/corerpc_impl.h index 0cd5f91707..b996b34b06 100644 --- a/grpc/server/src/core/corerpc_impl.h +++ b/grpc/server/src/core/corerpc_impl.h @@ -1,4 +1,5 @@ #include "core/core.grpc.pb.h" +#include "dronecore.h" using grpc::Status; using grpc::ServerContext;