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:
Kayne Ruse
2014-12-27 19:28:02 +11:00
7 changed files with 21 additions and 19 deletions
+1 -1
View File
@@ -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
View File
@@ -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();
+2 -2
View File
@@ -39,7 +39,7 @@ void Timer::Stop() {
std::ostream& operator<<(std::ostream& os, Timer& t) { std::ostream& operator<<(std::ostream& os, Timer& t) {
os << t.GetName() << ": "; os << t.GetName() << ": ";
os << std::chrono::duration_cast<std::chrono::milliseconds>(t.GetTime()).count(); os << std::chrono::duration_cast<std::chrono::microseconds>(t.GetTime()).count();
os << "ms"; os << "us";
return os; return os;
} }
+2 -2
View File
@@ -34,8 +34,8 @@ public:
Timer(std::string s); Timer(std::string s);
~Timer() = default; ~Timer() = default;
inline void Start(); void Start();
inline void Stop(); void Stop();
//accessors and mutators //accessors and mutators
Clock::duration GetTime() { return timeSpan; } Clock::duration GetTime() { return timeSpan; }
+11 -6
View File
@@ -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());
} }
+3 -6
View File
@@ -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;
}; };
+1 -1
View File
@@ -43,7 +43,7 @@ void ServerApplication::Init(int argc, char* argv[]) {
std::cout << "Beginning " << argv[0] << std::endl; std::cout << "Beginning " << argv[0] << std::endl;
//load the config settings //load the config settings
config.Load("rsc/config.cfg", argc, argv); config.Load("rsc/config.cfg", false, argc, argv);
//------------------------- //-------------------------
//Initialize the APIs //Initialize the APIs