/************************************************************/ /* NAME: chenlizhi */ /* ORGN: MIT */ /* FILE: StateManagement.cpp */ /* DATE: */ /************************************************************/ #include #include "MBUtils.h" #include "StateManagement.h" #include #include 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 sParams; m_MissionReader.EnableVerbatimQuoting(false); if(m_MissionReader.GetConfiguration(GetAppName(), sParams)) { list::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); }