Go to the documentation of this file.
22 #ifndef ENGINE_JSON_SERVER_H
23 #define ENGINE_JSON_SERVER_H
34 #include <pistache/router.h>
35 #include <pistache/endpoint.h>
36 #include <nlohmann/json.hpp>
46 static constexpr
auto ShutdownWaitTime = std::chrono::milliseconds(10*1000);
58 using lock_t = std::unique_lock<EngineJSONServer::mutex_t>;
66 EngineJSONServer(
const std::string &engineAddress,
const std::string &engineName,
const std::string &clientAddress);
197 bool _serverRunning =
false;
202 bool _shutdownFlag =
false;
207 std::mutex _shutdown_mutex;
212 std::string _serverAddress;
217 Pistache::Rest::Router _router;
225 std::string _engineName;
227 using enpoint_ptr_t = std::unique_ptr<Pistache::Http::Endpoint>;
232 enpoint_ptr_t _pEndpoint =
nullptr;
237 std::map<std::string, JsonDataPackController*> _datapacksControllers;
252 static nlohmann::json parseRequest(
const Pistache::Rest::Request &req, Pistache::Http::ResponseWriter &res);
259 void getDataPackDataHandler(
const Pistache::Rest::Request &req, Pistache::Http::ResponseWriter res);
266 void setDataPackProcessorr(
const Pistache::Rest::Request &req, Pistache::Http::ResponseWriter res);
273 static const std::string &getIteratorKey(
const nlohmann::json::const_iterator &jsonIterator);
280 void runLoopStepHandler(
const Pistache::Rest::Request &req, Pistache::Http::ResponseWriter res);
287 void initializeHandler(
const Pistache::Rest::Request &req, Pistache::Http::ResponseWriter res);
294 void resetHandler(
const Pistache::Rest::Request &req, Pistache::Http::ResponseWriter res);
301 void shutdownHandler(
const Pistache::Rest::Request &req, Pistache::Http::ResponseWriter res);
309 static Pistache::Http::Endpoint createEndpoint(std::string *engineAddress,
const std::string &engineName);
315 #endif // ENGINE_JSON_SERVER_H
mutex_t _datapackLock
Lock access to _datapacks to make execution thread-safe.
Definition: engine_json_server.h:166
static constexpr std::string_view GetDataPackInformationRoute
Definition: engine_json_server.h:49
server
Definition: python_grpc_engine.py:67
static constexpr std::string_view RunLoopStepRoute
Definition: engine_json_server.h:51
virtual nlohmann::json getDataPackData(const nlohmann::json &reqData)
Retrieves datapack data. Takes an array of datapack names for which to get data.
Definition: engine_json_server.cpp:175
virtual nlohmann::json initialize(const nlohmann::json &data, EngineJSONServer::lock_t &datapackLock)=0
Engine Initialization routine.
friend class TestEngineJSONServer
Definition: engine_json_server.h:312
void startServer()
Start the server synchronously.
Definition: engine_json_server.cpp:108
static constexpr std::string_view EngineServerResetRoute
REST Server Route for engine reset.
Definition: engine_json_config.h:72
static constexpr std::string_view EngineServerInitializeRoute
REST Server Route for engine initialization.
Definition: engine_json_config.h:67
static constexpr std::string_view InitializeRoute
Definition: engine_json_server.h:52
friend class EngineJSONServerTest_Functions_Test
Definition: engine_json_server.h:311
void registerDataPackNoLock(const std::string &datapackName, JsonDataPackController *interface)
Registers a datapack. Skips locking the mutex. Should only be used if thread-safe access to _datapack...
Definition: engine_json_server.cpp:159
std::timed_mutex mutex_t
Definition: engine_json_server.h:57
static constexpr std::string_view EngineServerSetDataPacksRoute
REST Server Route to which to send datapack changes.
Definition: engine_json_config.h:57
std::unique_lock< EngineJSONServer::mutex_t > lock_t
Definition: engine_json_server.h:58
EngineJSONServer()=delete
No dummy servers without name and address.
std::string serverAddress() const
Get server address.
Definition: engine_json_server.cpp:146
virtual void setDataPackData(const nlohmann::json &reqData)
Set datapack data.
Definition: engine_json_server.cpp:209
Base controller class for JSON datapacks.
Definition: json_datapack_controller.h:43
NRP Logging functions.
Definition: nrp_logger.h:45
virtual nlohmann::json shutdown(const nlohmann::json &data)=0
Engine Shutdown routine.
Manages communication with the NRP. Uses a REST server to send/receive data. Singleton class.
Definition: engine_json_server.h:41
void registerDataPack(const std::string &datapackName, JsonDataPackController *interface)
Registers a datapack.
Definition: engine_json_server.cpp:151
static constexpr std::string_view SetDataPackRoute
Definition: engine_json_server.h:50
EngineJSONServer & operator=(const EngineJSONServer &)=delete
void startServerAsync()
Start the server in asynchronous mode.
Definition: engine_json_server.cpp:96
virtual ~EngineJSONServer()
Definition: engine_json_server.cpp:84
static constexpr std::string_view EngineServerRunLoopStepRoute
REST Server Route to execute a single loop.
Definition: engine_json_config.h:62
bool isServerRunning() const
Is the server running?
Definition: engine_json_server.cpp:91
static constexpr std::string_view EngineServerShutdownRoute
REST Server Route for engine shutdown.
Definition: engine_json_config.h:77
static constexpr std::string_view ResetRoute
Definition: engine_json_server.h:53
uint16_t serverPort() const
Get running server port.
Definition: engine_json_server.cpp:138
void clearRegisteredDataPacks()
Remove all registered datapacks.
Definition: engine_json_server.cpp:166
void shutdownServer()
Stop running server.
Definition: engine_json_server.cpp:123
static constexpr std::string_view EngineServerGetDataPacksRoute
REST Server Route from which to get datapack information.
Definition: engine_json_config.h:52
static constexpr std::string_view ShutdownRoute
Definition: engine_json_server.h:54
bool shutdownFlag()
Has a shutdown command been received?
Definition: engine_json_server.cpp:232
std::chrono::nanoseconds SimulationTime
Definition: time_utils.h:31
virtual SimulationTime runLoopStep(SimulationTime timeStep)=0
Run a single loop step.
virtual nlohmann::json reset(EngineJSONServer::lock_t &datapackLock)=0
Engine reset routine.
const std::string & getEngineName()
Get the Engine name.
Definition: engine_json_server.h:191
nlohmann::json json
Definition: engine_json_server.cpp:31