CAndruavParser is a singleton class responsible for parsing incoming JSON-based commands from remote parties in the DroneEngage communication system.
It decodes and routes command messages to appropriate handlers based on message type, acting as a central dispatcher for protocol-level instructions.
Definition
CAndruavParser is a thread-safe singleton class defined in the de::andruav_servers namespace. It provides static access to a single instance and exposes two primary parsing methods: parseCommand and parseRemoteExecuteCommand. The class is non-copyable and privately constructed, enforcing singleton usage.
19:54:/mnt/8a619ce7-cd3f-4520-af65-7991f16410f7/public_versions/drone_engage/drone_engage_communication_pro/src/comm_server/andruav_parser.hpp
class CAndruavParser
{
public:
// Thread-safe singleton pattern (Meyers singleton)
static CAndruavParser& getInstance()
{
static CAndruavParser instance;
return instance;
}
public:
// Prevent copying and assignment
CAndruavParser(CAndruavParser const&) = delete;
void operator=(CAndruavParser const&) = delete;
private:
CAndruavParser() {}
public:
~CAndruavParser() {}
public:
// Parses general command messages
void parseCommand(const std::string& sender_party_id, const int& command_type, const Json_de& jsonMessage);
// Parses remote execution command messages
void parseRemoteExecuteCommand(const std::string& sender_party_id, const Json_de& jsonMessage);
private:
// Reference to global unit registry
CAndruavUnits& m_andruav_units = CAndruavUnits::getInstance();
};
Type: Singleton class
Namespace:
de::andruav_serversMethods:
getInstance()– Returns the single global instance (thread-safe due to static local variable).parseCommand(...)– Dispatches a command based oncommand_type.parseRemoteExecuteCommand(...)– Handles execution commands, often involving remote control actions.
Dependencies:
Json_de(aliased fromnlohmann::json) for JSON parsing.CAndruavUnits– Global registry of connected units, accessed via singleton.
Side effects: Modifies internal state of units via
m_andruav_units, may trigger command execution or status updates.
Example Usages
CAndruavParser is invoked in andruav_comm_server_local.cpp to process incoming JSON messages from network clients. The message type determines whether parseRemoteExecuteCommand or the general parseCommand is called.
314:323:/home/mhefny/TDisk/public_versions/drone_engage/drone_engage_communication_pro/src/comm_server/andruav_comm_server_local.cpp
case TYPE_AndruavMessage_RemoteExecute:
{
CAndruavParser::getInstance().parseRemoteExecuteCommand(sender, jMsg);
}
break;
default:
{
CAndruavParser::getInstance().parseCommand(sender, command_type, jMsg);
}
break;
This pattern appears in multiple locations within andruav_comm_server_local.cpp, indicating that CAndruavParser is a core component in the message dispatch pipeline. It is used consistently whenever a JSON message arrives from a remote sender and needs to be interpreted.
Usage Summary:
Called exclusively through its singleton
getInstance().Used in
andruav_comm_server_local.cppto handle incoming messages.No direct instantiation; always accessed statically.
Central to command routing — all high-level protocol messages pass through it.
Notes
The singleton implementation follows the Meyers singleton pattern (line 24–28), which is thread-safe in C++11 and later due to guaranteed static initialization concurrency safety.
Despite being defined in a header, its methods are implemented in
andruav_parser.cpp, indicating separation of interface and implementation.The class does not own any data directly — it operates through
m_andruav_units, which suggests it functions primarily as a stateless processor/router.
See Also
CAndruavUnits: Global registry of connected devices; used byCAndruavParserto retrieve or create unit instances during command handling.CAndruavUnit: Represents an individual connected drone or client; commands parsed byCAndruavParserare typically applied to instances of this class.Json_de: Type alias fornlohmann::json, used throughout for JSON deserialization; essential for interpreting incoming messages.andruav_comm_server_local.cpp: Primary caller ofCAndruavParser; contains the network message loop that feeds data into the parser.