void Settings::SaveChanged() { if(settingsJSON == NULL) return; for(int i = 0; i < variables.GetSizeI(); i++) { IVariable* var = variables[i]; if(!var->IsChanged()) { continue; } var->SaveValue(); JSON* varJSON = var->json; if(varJSON == NULL) { varJSON = settingsJSON->GetItemByName(var->name); var->json = varJSON; } if(varJSON == NULL) { settingsJSON->AddItem(var->name,var->Serialize()); } else { varJSON->ReplaceNodeWith(var->Serialize()); } } rootSettingsJSON->Save(settingsFileName); PrintFileToLog(settingsFileName); }
void Settings::Load() { if(settingsJSON == NULL) return; for(int i = 0; i < variables.GetSizeI(); i++) { IVariable* var = variables[i]; JSON* varJSON = var->json; if(varJSON == NULL) { varJSON = settingsJSON->GetItemByName(var->name); } if(varJSON) { var->json = varJSON; switch(varJSON->Type) { case JSON_Bool: var->LoadBool(varJSON->GetBoolValue()); break; case JSON_Number: var->LoadNumber(varJSON->GetDoubleValue()); break; case JSON_String: var->LoadCStr(varJSON->GetStringValue().ToCStr()); break; default: break; } } } }
// GetValue - Получить значение в единицах измерения (В, А, ...). Аргументу присваивается значение. inline float AnalogDcRmsSensor::getValue () { // printf("mean = %f\n", _rmsFilter.getMean()); // printf("code zero = %f\n", _codeZero->getValueFlt()); // printf("uCal = %f\n", _uCal->getValueFlt()); // printf("code uCal = %f\n\n", _codeUcal->getValueFlt()); return ((_rmsFilter.getMean() - _codeZero->getValueFlt())*_uCal->getValueFlt())/_codeUcal->getValueFlt(); }
// // Env // string CCommandEventManager::CEnvironment::replace(const string &text) { uint start = 0, stop; string replaced = text; do { start = replaced.find_first_of('$', start); if (start == string::npos || start == replaced.size()-1) break; if (replaced[start+1] == '$') { replaced.erase(start, 1); ++start; continue; } else if (replaced[start+1] == '(') { stop = replaced.find_first_of(')', start+1); if (stop == string::npos) break; string val = get(replaced.substr(start+2, stop-start-2)); replaced.erase(start, stop-start+1); replaced.insert(start, val); start += val.size(); } else if (replaced[start+1] == '[') { stop = replaced.find_first_of(']', start+1); if (stop == string::npos) break; string var = replaced.substr(start+2, stop-start-2); string val = ""; ICommand::TCommand::iterator it = ICommand::Commands->find(var); if (it != ICommand::Commands->end()) { IVariable *variable = dynamic_cast<IVariable*>((*it).second); if (variable != NULL) { val = variable->toString(); } } replaced.erase(start, stop-start+1); replaced.insert(start, val); start += val.size(); } else { ++start; } } while (start < replaced.size()); return replaced; }
bool Settings::IsChanged() { if(settingsJSON == NULL) return false; for(int i = 0; i < variables.GetSizeI(); i++) { IVariable* var = variables[i]; if(var->IsChanged()) { return true; } } return false; }
void AgentState::Log(Agent* pAgent, bool bForce) { BEHAVIAC_UNUSED_VAR(pAgent); BEHAVIAC_UNUSED_VAR(bForce); #if !BEHAVIAC_RELEASE if (Config::IsLoggingOrSocketing()) { if (this->state_stack.size() > 0) { map<behaviac::string, bool> logged; for (int i = this->state_stack.size() - 1; i >= 0; --i) { AgentState* t = this->state_stack[i]; behaviac::map<uint32_t, IVariable*>& _value = t->Vars(); for (behaviac::map<uint32_t, IVariable*>::iterator it = _value.begin(); it != _value.end(); it++) { IVariable* pVar = it->second; if (bForce || pVar->IsChanged()) { if (logged.find(pVar->Name()) == logged.end()) { pVar->Log(pAgent); logged.insert(map<behaviac::string, bool>::value_type(pVar->Name(), true)); } } } }//end of for } else { //base.Log(pAgent, bForce); Variables::Log(pAgent, bForce); } } #endif }
void Settings::SaveOnly(const Array<const char*> &varNames) { if(settingsJSON == NULL) return; for(int i = 0; i < variables.GetSizeI(); i++) { IVariable* var = variables[i]; bool found = false; for(int namesIndex = 0; namesIndex < varNames.GetSizeI(); namesIndex++) { if(strcmp(var->name, varNames[namesIndex]) == 0) { found = true; break; } } if(!found) { continue; } var->SaveValue(); JSON* varJSON = var->json; if(varJSON == NULL) { varJSON = settingsJSON->GetItemByName(var->name); var->json = varJSON; } if(varJSON == NULL) { settingsJSON->AddItem(var->name,var->Serialize()); } else { varJSON->ReplaceNodeWith(var->Serialize()); } } rootSettingsJSON->Save(settingsFileName); }
/** * cbShardOpenStateFile() * Callback for ShardOpenStateFile */ void cbShardOpenStateFile(IVariable &var) { // remove previous file change callback if (!ShardOpenStateFileName.empty()) { CFile::removeFileChangeCallback(ShardOpenStateFileName); nlinfo("Removed callback for ShardOpenStateFileName file '%s'", ShardOpenStateFileName.c_str()); } ShardOpenStateFileName = var.toString(); if (!ShardOpenStateFileName.empty()) { // set new callback for the file CFile::addFileChangeCallback(ShardOpenStateFileName, updateShardOpenFromFile); nlinfo("Set callback for ShardOpenStateFileName file '%s'", ShardOpenStateFileName.c_str()); // and update state from file... updateShardOpenFromFile(ShardOpenStateFileName); } }
// GetValue - Получить значение в единицах измерения (В, А, ...). Аргументу присваивается значение. inline void AnalogDcRmsSensor::getValue (float &value) { value = ((_rmsFilter.getMean() - _codeZero->getValueFlt())*_uCal->getValueFlt())/_codeUcal->getValueFlt(); }