Merge branch 'develop' into high-water-mark
Conflicts: server/server_logic.cpp Finally merging the changes to develop. This is only the ConfigUtility skipping missing files, and something with the Timer class, that I'll need to test the collisions.
This commit is contained in:
@@ -49,7 +49,7 @@ void ClientApplication::Init(int argc, char* argv[]) {
|
||||
|
||||
//load the prerequisites
|
||||
ConfigUtility& config = ConfigUtility::GetSingleton();
|
||||
config.Load("rsc/config.cfg", argc, argv);
|
||||
config.Load("rsc/config.cfg", false, argc, argv);
|
||||
|
||||
//-------------------------
|
||||
//Initialize the APIs
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ int main(int argc, char* argv[]) {
|
||||
ConfigUtility::CreateSingleton();
|
||||
UDPNetworkUtility::CreateSingleton();
|
||||
|
||||
//call the server's routines
|
||||
//call the client's routines
|
||||
ClientApplication::CreateSingleton();
|
||||
ClientApplication& app = ClientApplication::GetSingleton();
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ void Timer::Stop() {
|
||||
|
||||
std::ostream& operator<<(std::ostream& os, Timer& t) {
|
||||
os << t.GetName() << ": ";
|
||||
os << std::chrono::duration_cast<std::chrono::milliseconds>(t.GetTime()).count();
|
||||
os << "ms";
|
||||
os << std::chrono::duration_cast<std::chrono::microseconds>(t.GetTime()).count();
|
||||
os << "us";
|
||||
return os;
|
||||
}
|
||||
|
||||
@@ -34,8 +34,8 @@ public:
|
||||
Timer(std::string s);
|
||||
~Timer() = default;
|
||||
|
||||
inline void Start();
|
||||
inline void Stop();
|
||||
void Start();
|
||||
void Stop();
|
||||
|
||||
//accessors and mutators
|
||||
Clock::duration GetTime() { return timeSpan; }
|
||||
|
||||
@@ -27,13 +27,13 @@
|
||||
#include <sstream>
|
||||
#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
|
||||
configMap.clear();
|
||||
|
||||
//use the default file
|
||||
if (argc < 2) {
|
||||
configMap = Read(fname);
|
||||
configMap = Read(fname, skipMissingFile);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -47,7 +47,9 @@ void ConfigUtility::Load(std::string fname, int argc, char* argv[]) {
|
||||
for (int i = 1; i < argc; ++i) {
|
||||
//read from a specified config file
|
||||
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;
|
||||
continue;
|
||||
}
|
||||
@@ -73,18 +75,21 @@ void ConfigUtility::Load(std::string fname, int argc, char* argv[]) {
|
||||
|
||||
//finally, construct the final config table
|
||||
if (!redirectUsed) {
|
||||
redirectedFile = Read(fname);
|
||||
redirectedFile = Read(fname, skipMissingFile);
|
||||
}
|
||||
configMap.insert(cmdLineParams.begin(), cmdLineParams.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
|
||||
table_t retTable;
|
||||
std::ifstream is(fname);
|
||||
|
||||
if (!is.is_open()) {
|
||||
if (skipMissingFile) {
|
||||
return {}; //empty table
|
||||
}
|
||||
std::ostringstream os;
|
||||
os << "Failed to open a config file: " << fname;
|
||||
throw(std::runtime_error( os.str() ));
|
||||
@@ -143,7 +148,7 @@ ConfigUtility::table_t ConfigUtility::Read(std::string fname) {
|
||||
|
||||
//load in any subordinate config files
|
||||
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());
|
||||
}
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
class ConfigUtility: public Singleton<ConfigUtility> {
|
||||
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
|
||||
std::string& String(std::string);
|
||||
@@ -47,10 +47,7 @@ private:
|
||||
|
||||
friend Singleton<ConfigUtility>;
|
||||
|
||||
ConfigUtility() = default;
|
||||
~ConfigUtility() = default;
|
||||
|
||||
table_t Read(std::string fname);
|
||||
table_t Read(std::string fname, bool skipMissingFile);
|
||||
|
||||
table_t configMap;
|
||||
};
|
||||
|
||||
@@ -43,7 +43,7 @@ void ServerApplication::Init(int argc, char* argv[]) {
|
||||
std::cout << "Beginning " << argv[0] << std::endl;
|
||||
|
||||
//load the config settings
|
||||
config.Load("rsc/config.cfg", argc, argv);
|
||||
config.Load("rsc/config.cfg", false, argc, argv);
|
||||
|
||||
//-------------------------
|
||||
//Initialize the APIs
|
||||
|
||||
Reference in New Issue
Block a user