Files
moos-ivp-pi/src/pStateManagement/StateManagement.cpp
2023-11-30 09:06:35 +08:00

153 lines
3.8 KiB
C++
Executable File

/************************************************************/
/* NAME: chenlizhi */
/* ORGN: MIT */
/* FILE: StateManagement.cpp */
/* DATE: */
/************************************************************/
#include <iterator>
#include "MBUtils.h"
#include "StateManagement.h"
#include <json/json.h>
#include <cmath>
using namespace std;
//---------------------------------------------------------
// Constructor
StateManagement::StateManagement()
{
}
//---------------------------------------------------------
// Destructor
StateManagement::~StateManagement()
{
}
//---------------------------------------------------------
// Procedure: OnNewMail
bool StateManagement::OnNewMail(MOOSMSG_LIST &NewMail)
{
MOOSMSG_LIST::iterator p;
for(p=NewMail.begin(); p!=NewMail.end(); p++) {
CMOOSMsg &msg = *p;
string key = msg.GetKey();
string comm = msg.GetCommunity();
double dval = msg.GetDouble();
string sval = msg.GetString();
string msrc = msg.GetSource();
double mtime = msg.GetTime();
bool mdbl = msg.IsDouble();
bool mstr = msg.IsString();
Json::Value deviceState;
std::string manualState;
int missionState;
if(key == "uManual_enable_cmd")
{
manualState = msg.GetString();
}
if(key == "uMission_task_fb")
{
std::string missionStateString = msg.GetString();
std::string errMission;
Json::Value missionStateData;
std::istringstream issm(missionStateString);
Json::CharReaderBuilder builderMission;
bool parsingResultMission = Json::parseFromStream(builderMission, issm, &missionStateData, &errMission);
if (!parsingResultMission) {
std::cerr << "Failed to parse JSON string." << std::endl;
return -1;
}
missionState = missionStateData["state"].asInt();
}
if(manualState == "true")
{
deviceState["opMode"] = opModeLists.external;
}
else if (manualState == "false")
{
if(missionState == 0)
{
deviceState["opMode"] = opModeLists.error;
}
if(missionState == 1)
{
deviceState["opMode"] = opModeLists.service;
}
if(missionState == 3)
{
deviceState["opMode"] = opModeLists.maneuver;
}
}
Json::StreamWriterBuilder builder;
std::string deviceStateString = Json::writeString(builder, deviceState);
Notify("uDevice_state_fb", deviceStateString);
}
return(true);
}
//---------------------------------------------------------
// Procedure: OnConnectToServer
bool StateManagement::OnConnectToServer()
{
RegisterVariables();
return(true);
}
//---------------------------------------------------------
// Procedure: Iterate()
// happens AppTick times per second
bool StateManagement::Iterate()
{
return(true);
}
//---------------------------------------------------------
// Procedure: OnStartUp()
// happens before connection is open
bool StateManagement::OnStartUp()
{
list<string> sParams;
m_MissionReader.EnableVerbatimQuoting(false);
if(m_MissionReader.GetConfiguration(GetAppName(), sParams)) {
list<string>::iterator p;
for(p=sParams.begin(); p!=sParams.end(); p++) {
string line = *p;
string param = tolower(biteStringX(line, '='));
string value = line;
if(param == "foo") {
//handled
}
else if(param == "bar") {
//handled
}
}
}
RegisterVariables();
return(true);
}
//---------------------------------------------------------
// Procedure: RegisterVariables
void StateManagement::RegisterVariables()
{
// Register("FOOBAR", 0);
}