Added an option to skip missing config files
This commit is contained in:
@@ -49,7 +49,7 @@ void ClientApplication::Init(int argc, char* argv[]) {
|
|||||||
|
|
||||||
//load the prerequisites
|
//load the prerequisites
|
||||||
ConfigUtility& config = ConfigUtility::GetSingleton();
|
ConfigUtility& config = ConfigUtility::GetSingleton();
|
||||||
config.Load("rsc/config.cfg", argc, argv);
|
config.Load("rsc/config.cfg", false, argc, argv);
|
||||||
|
|
||||||
//-------------------------
|
//-------------------------
|
||||||
//Initialize the APIs
|
//Initialize the APIs
|
||||||
|
|||||||
+1
-1
@@ -36,7 +36,7 @@ int main(int argc, char* argv[]) {
|
|||||||
ConfigUtility::CreateSingleton();
|
ConfigUtility::CreateSingleton();
|
||||||
UDPNetworkUtility::CreateSingleton();
|
UDPNetworkUtility::CreateSingleton();
|
||||||
|
|
||||||
//call the server's routines
|
//call the client's routines
|
||||||
ClientApplication::CreateSingleton();
|
ClientApplication::CreateSingleton();
|
||||||
ClientApplication& app = ClientApplication::GetSingleton();
|
ClientApplication& app = ClientApplication::GetSingleton();
|
||||||
|
|
||||||
|
|||||||
@@ -27,13 +27,13 @@
|
|||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
void ConfigUtility::Load(std::string fname, int argc, char* argv[]) {
|
void ConfigUtility::Load(std::string fname, bool skipMissingFile, int argc, char* argv[]) {
|
||||||
//clear the stored configuration
|
//clear the stored configuration
|
||||||
configMap.clear();
|
configMap.clear();
|
||||||
|
|
||||||
//use the default file
|
//use the default file
|
||||||
if (argc < 2) {
|
if (argc < 2) {
|
||||||
configMap = Read(fname);
|
configMap = Read(fname, skipMissingFile);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,7 +47,9 @@ void ConfigUtility::Load(std::string fname, int argc, char* argv[]) {
|
|||||||
for (int i = 1; i < argc; ++i) {
|
for (int i = 1; i < argc; ++i) {
|
||||||
//read from a specified config file
|
//read from a specified config file
|
||||||
if (!strncmp(argv[i], "-config=", 8)) {
|
if (!strncmp(argv[i], "-config=", 8)) {
|
||||||
redirectedFile = Read(argv[i] + 8);
|
//older specified files take precedence
|
||||||
|
table_t tmp = Read(argv[i] + 8, skipMissingFile);
|
||||||
|
redirectedFile.insert(tmp.begin(), tmp.end());
|
||||||
redirectUsed = true;
|
redirectUsed = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -73,18 +75,21 @@ void ConfigUtility::Load(std::string fname, int argc, char* argv[]) {
|
|||||||
|
|
||||||
//finally, construct the final config table
|
//finally, construct the final config table
|
||||||
if (!redirectUsed) {
|
if (!redirectUsed) {
|
||||||
redirectedFile = Read(fname);
|
redirectedFile = Read(fname, skipMissingFile);
|
||||||
}
|
}
|
||||||
configMap.insert(cmdLineParams.begin(), cmdLineParams.end());
|
configMap.insert(cmdLineParams.begin(), cmdLineParams.end());
|
||||||
configMap.insert(redirectedFile.begin(), redirectedFile.end());
|
configMap.insert(redirectedFile.begin(), redirectedFile.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
ConfigUtility::table_t ConfigUtility::Read(std::string fname) {
|
ConfigUtility::table_t ConfigUtility::Read(std::string fname, bool skipMissingFile) {
|
||||||
//read in and return this file's data
|
//read in and return this file's data
|
||||||
table_t retTable;
|
table_t retTable;
|
||||||
std::ifstream is(fname);
|
std::ifstream is(fname);
|
||||||
|
|
||||||
if (!is.is_open()) {
|
if (!is.is_open()) {
|
||||||
|
if (skipMissingFile) {
|
||||||
|
return {}; //empty table
|
||||||
|
}
|
||||||
std::ostringstream os;
|
std::ostringstream os;
|
||||||
os << "Failed to open a config file: " << fname;
|
os << "Failed to open a config file: " << fname;
|
||||||
throw(std::runtime_error( os.str() ));
|
throw(std::runtime_error( os.str() ));
|
||||||
@@ -143,7 +148,7 @@ ConfigUtility::table_t ConfigUtility::Read(std::string fname) {
|
|||||||
|
|
||||||
//load in any subordinate config files
|
//load in any subordinate config files
|
||||||
if (retTable.find("config.next") != retTable.end()) {
|
if (retTable.find("config.next") != retTable.end()) {
|
||||||
table_t subTable = Read(retTable["config.next"]);
|
table_t subTable = Read(retTable["config.next"], skipMissingFile);
|
||||||
retTable.insert(subTable.begin(), subTable.end());
|
retTable.insert(subTable.begin(), subTable.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,9 +27,9 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
class ConfigUtility : public Singleton<ConfigUtility> {
|
class ConfigUtility: public Singleton<ConfigUtility> {
|
||||||
public:
|
public:
|
||||||
void Load(std::string fname, int argc = 0, char* argv[] = nullptr);
|
void Load(std::string fname, bool skipMissingFile = false, int argc = 0, char* argv[] = nullptr);
|
||||||
|
|
||||||
//convert to a type
|
//convert to a type
|
||||||
std::string& String(std::string);
|
std::string& String(std::string);
|
||||||
@@ -47,10 +47,7 @@ private:
|
|||||||
|
|
||||||
friend Singleton<ConfigUtility>;
|
friend Singleton<ConfigUtility>;
|
||||||
|
|
||||||
ConfigUtility() = default;
|
table_t Read(std::string fname, bool skipMissingFile);
|
||||||
~ConfigUtility() = default;
|
|
||||||
|
|
||||||
table_t Read(std::string fname);
|
|
||||||
|
|
||||||
table_t configMap;
|
table_t configMap;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ void ServerApplication::Init(int argc, char* argv[]) {
|
|||||||
std::cout << "Beginning " << argv[0] << std::endl;
|
std::cout << "Beginning " << argv[0] << std::endl;
|
||||||
|
|
||||||
//load the prerequisites
|
//load the prerequisites
|
||||||
config.Load("rsc/config.cfg", argc, argv);
|
config.Load("rsc/config.cfg", false, argc, argv);
|
||||||
|
|
||||||
//-------------------------
|
//-------------------------
|
||||||
//Initialize the APIs
|
//Initialize the APIs
|
||||||
|
|||||||
Reference in New Issue
Block a user