153 lines
3.8 KiB
C++
153 lines
3.8 KiB
C++
/************************************************************/
|
|
/* NAME: chenlizhi */
|
|
/* ORGN: MIT */
|
|
/* FILE: StateManagement.cpp */
|
|
/* DATE: */
|
|
/************************************************************/
|
|
|
|
#include <iterator>
|
|
#include "MBUtils.h"
|
|
#include "StateManagement.h"
|
|
#include <json/json.h>
|
|
|
|
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);
|
|
}
|
|
|