-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
#15 Added settings.ini that is read by a configuration class. It does…
…n't have any effect yet but forwarding the configuration from the .ini file to the game etc is the next step.
- Loading branch information
Showing
13 changed files
with
741 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
[Graphics] | ||
width = 800 | ||
height = 600 | ||
[Server] | ||
name = "Spiel1" | ||
port = 12345 | ||
[Client] | ||
name = "nitzel" | ||
port = 12345 | ||
host = "127!!" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
#include "configuration.hpp" | ||
|
||
const std::string CConfiguration::CServer::section = "Server"; | ||
const std::string CConfiguration::CClient::section = "Client"; | ||
|
||
CConfiguration::CServer::CServer(INIReader& iniReader) : | ||
port(iniReader.GetInteger(CServer::section, "port", port)), | ||
name(iniReader.GetString(CServer::section, "name", name)) { | ||
} | ||
|
||
CConfiguration::CServer::CServer() { | ||
} | ||
|
||
CConfiguration::CClient::CClient(INIReader& iniReader) : | ||
port(iniReader.GetInteger(CClient::section, "port", port)), | ||
name(iniReader.GetString(CClient::section, "name", name)), | ||
host(iniReader.GetString(CClient::section, "host", host)) { | ||
} | ||
|
||
CConfiguration::CClient::CClient() { | ||
} | ||
|
||
|
||
CConfiguration::CConfiguration(std::string iniFilename) { | ||
INIReader iniReader(iniFilename); | ||
server = CConfiguration::CServer(iniReader); | ||
client = CConfiguration::CClient(iniReader); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
#ifndef __CONFIGURATION__ | ||
#define __CONFIGURATION__ | ||
|
||
#include <string> | ||
#include <iostream> | ||
#include "include/inih/INIReader.hpp" | ||
|
||
#define DEFAULT_PORT 12345 | ||
|
||
/// Reads the configuration from an ini file. | ||
/// Has default values for missing entries. | ||
class CConfiguration { | ||
public: | ||
/// Server-section of ini file. | ||
class CServer { | ||
private: | ||
static const std::string section; | ||
public: | ||
unsigned int port = DEFAULT_PORT; | ||
std::string name = "Planet Battle"; | ||
|
||
CServer(); | ||
CServer(INIReader& iniReader); | ||
friend std::ostream& operator<< (std::ostream& os, CConfiguration::CServer& server) { | ||
return os << "[name=" << server.name << "; port=" << server.port << ";]"; | ||
} | ||
}; | ||
|
||
/// Client-section of ini file. | ||
class CClient { | ||
private: | ||
static const std::string section; | ||
public: | ||
unsigned int port = DEFAULT_PORT; | ||
std::string name = "unknown"; | ||
std::string host = "localhost"; | ||
|
||
CClient(); | ||
CClient(INIReader& iniReader); | ||
friend std::ostream& operator<< (std::ostream& os, CConfiguration::CClient& client) { | ||
return os << "[name=" << client.name << "; port=" << client.port << "; host=" << client.host << ";]"; | ||
} | ||
}; | ||
|
||
private: | ||
public: | ||
CServer server; | ||
CClient client; | ||
//CConfiguration() = delete; | ||
CConfiguration(std::string iniFilename = "config.ini"); | ||
friend std::ostream& operator<< (std::ostream& os, CConfiguration& configuration) { | ||
return os << "[Server=" << configuration.server << "; Client=" << configuration.client << ";]"; | ||
} | ||
}; | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
// Read an INI file into easy-to-access name/value pairs. | ||
|
||
// inih and INIReader are released under the New BSD license (see LICENSE.txt). | ||
// Go to the project home page for more info: | ||
// | ||
// https://github.com/benhoyt/inih | ||
|
||
#include <algorithm> | ||
#include <cctype> | ||
#include <cstdlib> | ||
#include "ini.h" | ||
#include "INIReader.hpp" | ||
|
||
using std::string; | ||
|
||
INIReader::INIReader(const string& filename) | ||
{ | ||
_error = ini_parse(filename.c_str(), ValueHandler, this); | ||
} | ||
|
||
int INIReader::ParseError() const | ||
{ | ||
return _error; | ||
} | ||
|
||
string INIReader::Get(const string& section, const string& name, const string& default_value) const | ||
{ | ||
string key = MakeKey(section, name); | ||
// Use _values.find() here instead of _values.at() to support pre C++11 compilers | ||
return _values.count(key) ? _values.find(key)->second : default_value; | ||
} | ||
|
||
string INIReader::GetString(const string& section, const string& name, const string& default_value) const | ||
{ | ||
const string str = Get(section, name, ""); | ||
return str.empty() ? default_value : str; | ||
} | ||
|
||
long INIReader::GetInteger(const string& section, const string& name, long default_value) const | ||
{ | ||
string valstr = Get(section, name, ""); | ||
const char* value = valstr.c_str(); | ||
char* end; | ||
// This parses "1234" (decimal) and also "0x4D2" (hex) | ||
long n = strtol(value, &end, 0); | ||
return end > value ? n : default_value; | ||
} | ||
|
||
double INIReader::GetReal(const string& section, const string& name, double default_value) const | ||
{ | ||
string valstr = Get(section, name, ""); | ||
const char* value = valstr.c_str(); | ||
char* end; | ||
double n = strtod(value, &end); | ||
return end > value ? n : default_value; | ||
} | ||
|
||
bool INIReader::GetBoolean(const string& section, const string& name, bool default_value) const | ||
{ | ||
string valstr = Get(section, name, ""); | ||
// Convert to lower case to make string comparisons case-insensitive | ||
std::transform(valstr.begin(), valstr.end(), valstr.begin(), ::tolower); | ||
if (valstr == "true" || valstr == "yes" || valstr == "on" || valstr == "1") | ||
return true; | ||
else if (valstr == "false" || valstr == "no" || valstr == "off" || valstr == "0") | ||
return false; | ||
else | ||
return default_value; | ||
} | ||
|
||
bool INIReader::HasValue(const std::string& section, const std::string& name) const | ||
{ | ||
string key = MakeKey(section, name); | ||
return _values.count(key); | ||
} | ||
|
||
string INIReader::MakeKey(const string& section, const string& name) | ||
{ | ||
string key = section + "=" + name; | ||
// Convert to lower case to make section/name lookups case-insensitive | ||
std::transform(key.begin(), key.end(), key.begin(), ::tolower); | ||
return key; | ||
} | ||
|
||
int INIReader::ValueHandler(void* user, const char* section, const char* name, | ||
const char* value) | ||
{ | ||
INIReader* reader = static_cast<INIReader*>(user); | ||
string key = MakeKey(section, name); | ||
if (reader->_values[key].size() > 0) | ||
reader->_values[key] += "\n"; | ||
reader->_values[key] += value; | ||
return 1; | ||
} |
Oops, something went wrong.