-
-
Notifications
You must be signed in to change notification settings - Fork 485
/
backend.cpp
78 lines (61 loc) · 2.2 KB
/
backend.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include "backend.h"
#include <grpc/grpc.h>
#include <grpc++/server.h>
#include <grpc++/server_builder.h>
#include <grpc++/server_context.h>
#include <grpc++/security/server_credentials.h>
#include <mutex>
#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"
namespace dronecore {
namespace backend {
class DroneCoreBackend::Impl
{
public:
Impl() {}
~Impl() {}
bool run(const int mavlink_listen_port)
{
_connection_initiator.start(_dc, 14540);
_connection_initiator.wait();
grpc::ServerBuilder builder;
setup_port(builder);
CoreServiceImpl core(_dc);
builder.RegisterService(&core);
Action action(&_dc.device());
ActionServiceImpl actionService(action);
builder.RegisterService(&actionService);
Mission mission(&_dc.device());
MissionServiceImpl missionService(mission);
builder.RegisterService(&missionService);
Telemetry telemetry(&_dc.device());
TelemetryServiceImpl telemetryService(telemetry);
builder.RegisterService(&telemetryService);
_server = builder.BuildAndStart();
LogInfo() << "Server started";
_server->Wait();
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<dronecore::DroneCore> _connection_initiator;
std::unique_ptr<grpc::Server> 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