From e4bde2e7838fa6bdbfe19798335def000027d0f4 Mon Sep 17 00:00:00 2001 From: marcelb Date: Sun, 21 May 2023 09:06:21 +0200 Subject: [PATCH] Tested --- .vscode/settings.json | 7 +++ example/config.cfg | 13 +++++ lib/config.hpp | 30 ++++++++++ src/config.cpp | 125 ++++++++++++++++++++++++++++++++++++++++++ test/compile.sh | 1 + test/test.cpp | 16 ++++++ test/test.o | Bin 0 -> 92112 bytes 7 files changed, 192 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 example/config.cfg create mode 100644 lib/config.hpp create mode 100644 src/config.cpp create mode 100644 test/compile.sh create mode 100644 test/test.cpp create mode 100755 test/test.o diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..0bd7bcb --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "files.associations": { + "*.tcc": "cpp", + "compare": "cpp", + "type_traits": "cpp" + } +} \ No newline at end of file diff --git a/example/config.cfg b/example/config.cfg new file mode 100644 index 0000000..7a98b7f --- /dev/null +++ b/example/config.cfg @@ -0,0 +1,13 @@ +Username=ivanm; +API=ZahgxFbYZTNheEQxvupTR1bt1eRC820GVStWXJhMHJ0xsBmMNBNQ3v22TNEwvSg; +Domain=itasel.ml; + +# dont touch this +consolePrintLogs=true; +DinioServer1=localhost; #ns-hl.ddns.net +DinioServer2=localhost; #lab-it.ddns.net; +DinioServer1Port=5000; +DinioServer2Port=4048; +DinioGetIPURL=http://lab-it.ddns.net/getip/index.php; #ovo ide na više A recorda i više servera pod istim domenom +# DinioGetIPURL2=http://ns-hl.ddns.net/getip/index.php; + diff --git a/lib/config.hpp b/lib/config.hpp new file mode 100644 index 0000000..c4de4c0 --- /dev/null +++ b/lib/config.hpp @@ -0,0 +1,30 @@ +#ifndef _CFG_ +#define _CFG_ + +#include +#include +#include +#include +#include + +using namespace std; + +void clearWhiteSpaces(string &a); +bool clearComments(string &a); +void parseConfigLine(const string a, string &b, string &c); + +class config { + public: + vector necessary; // = {"Username", "API", "Domain", "consolePrintLogs", "DinioServer1", "DinioServer2", "DinioGetIPURL", "DinioServer1Port", "DinioServer2Port" }; + map element; + + config(const string _configFilePath, const vector _necessary = {}); + + void print(); + bool init(const string _configFilePath); + bool isHaveNecessary(); + +}; + + +#endif \ No newline at end of file diff --git a/src/config.cpp b/src/config.cpp new file mode 100644 index 0000000..fec1f8c --- /dev/null +++ b/src/config.cpp @@ -0,0 +1,125 @@ +#include "../lib/config.hpp" + + +config::config(const string _configFilePath, const vector _necessary) { + necessary = _necessary; + if(!init(_configFilePath)) { + cout << "ERROR init config file" << endl; + exit(1); + } + if (!isHaveNecessary()) { + cout << "ERROR Konfiguracijska datoteka nema sva nužna polja!" << endl; + exit(2); + } +} + + +/** +* Otvaram config.cfg datoteku, čitam je i inicijaliziram map kontenjer configs prema cnf_fields +*/ + +bool config::init(const string _configFilePath) { + + ifstream configFile; + configFile.open(_configFilePath, ios::in); + if(!configFile) { + printf ("[CRITICAL ERROR] Nema konfiguracijske datoteke!"); + return false; + } + + else { + for (string line; getline(configFile, line); ) { + clearWhiteSpaces(line); + if(clearComments(line) && !line.empty()) { // samo ako nije komentar + string key, value; + parseConfigLine(line, key, value); + element[key] = value; + } + } + } + + configFile.close(); + return true; +} + + +/** + * @brief Funkcija ispisuje configs kontejner - KORISTIMO SAMO ZA RAZVOJ I DEBUG + * + */ +void config::print() { + for(auto i : element) { + cout << i.first << " " << i.second << "\n"; + } + +} + +/** + * +*/ + +bool config::isHaveNecessary() { + bool necessaryHave = true; + for (int i=0; i + +#include "../lib/config.hpp" + +using namespace std; + +int main() { + + config mycfg ("../example/config.cfg", {"Username", "API", "Domain" }); + + // cout << "HAloooo" << endl; + cout << mycfg.element["consolePrintLogs"]; + + + return 0; +} \ No newline at end of file diff --git a/test/test.o b/test/test.o new file mode 100755 index 0000000000000000000000000000000000000000..50856ad0d5bfbf14b63fbd262f335c02ad36f3a3 GIT binary patch literal 92112 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