// // 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; }
/** * 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); } }