22 #ifndef NRP_CORE_SERVER_H
23 #define NRP_CORE_SERVER_H
27 #include <condition_variable>
28 #include <grpcpp/grpcpp.h>
30 #include "nrp_protobuf/nrp_server.grpc.pb.h"
62 NrpCoreServer(
const std::string & address, std::shared_ptr<SimulationManager> && manager);
84 void waitForRequest();
87 bool isRequestPending()
const;
95 unsigned getRequestNumIterations()
const;
125 grpc::Status requestHelper(std::unique_lock<std::mutex> & lock,
RequestType requestType, NrpCore::SimStateMessage * returnMessage);
139 void prepareTrajectory(NrpCore::Trajectory * trajectory);
146 std::vector<std::shared_ptr<const DataPackInterface>> extractExternalDataPacks(
const NrpCore::DataPacks & message);
151 grpc::Status initialize(grpc::ServerContext * ,
const NrpCore::EmptyMessage * message, NrpCore::InitializeResponse * returnMessage)
override;
156 grpc::Status runLoop(grpc::ServerContext * ,
const NrpCore::RunLoopMessage * message, NrpCore::RunLoopResponse * status)
override;
161 grpc::Status runUntilTimeout(grpc::ServerContext * ,
const NrpCore::EmptyMessage * , NrpCore::RunLoopResponse * returnMessage)
override;
166 grpc::Status stopLoop(grpc::ServerContext * ,
const NrpCore::EmptyMessage * , NrpCore::Response * returnMessage)
override;
171 grpc::Status reset(grpc::ServerContext * ,
const NrpCore::ResetMessage * message, NrpCore::ResetResponse * returnMessage)
override;
176 grpc::Status shutdown(grpc::ServerContext * ,
const NrpCore::EmptyMessage * , NrpCore::Response * returnMessage)
override;
184 std::condition_variable _consumerConditionalVar;
187 std::condition_variable _producerConditionalVar;
190 std::unique_lock<std::mutex> _lock;
195 std::unique_ptr<grpc::Server> _server;
201 unsigned _numIterations = 0;
207 std::shared_ptr<SimulationManager> _manager;
210 std::vector<std::unique_ptr<protobuf_ops::NRPProtobufOpsIface>> _protoOps;
214 #endif // NRP_CORE_SERVER_H