Exemple #1
0
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);
}
Exemple #2
0
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;
}
Exemple #5
0
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;
}
Exemple #6
0
    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
    }
Exemple #7
0
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();
}