From d11785497ed3ee9a35a56cc9606893cacfc83c4b Mon Sep 17 00:00:00 2001 From: badaix Date: Mon, 31 Aug 2015 23:39:54 +0200 Subject: [PATCH] added config class --- server/config.cpp | 48 ++++++++++++++++++++++ server/config.h | 101 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 149 insertions(+) create mode 100644 server/config.cpp create mode 100644 server/config.h diff --git a/server/config.cpp b/server/config.cpp new file mode 100644 index 00000000..ab0a8bf6 --- /dev/null +++ b/server/config.cpp @@ -0,0 +1,48 @@ +/*** + This file is part of snapcast + Copyright (C) 2015 Johannes Pohl + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +***/ + +#include "config.h" +#include + +using namespace std; + + +Config::Config() +{ +} + + + +void Config::test() +{ + ifstream ifs("snapserver.json", std::ifstream::in); + json j; + ifs >> j; + std::cout << std::setw(4) << j << std::endl; + json j1 = j["Client"];//["Hobbys"]; + for (json::iterator it = j1.begin(); it != j1.end(); ++it) + { +// json j2 = *it; +// cout << "Key: " << j2.key() << ", value: " j2.value() << "\n"; + ClientInfo client; + client.fromJson(*it); + std::cout << "Client:\n" << std::setw(4) << client.toJson() << '\n'; + } +// std::cout << std::setw(4) << j["Inhaber"]["Hobbys2"] << std::endl; +} + diff --git a/server/config.h b/server/config.h new file mode 100644 index 00000000..da5da58d --- /dev/null +++ b/server/config.h @@ -0,0 +1,101 @@ +/*** + This file is part of snapcast + Copyright (C) 2015 Johannes Pohl + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +***/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include +#include +#include "json.hpp" + +using json = nlohmann::json; + +template +T jGet(json j, const std::string& what, const T& def) +{ + try + { + return j[what].get(); + } + catch(...) + { + return def; + } +} + + +struct ClientInfo +{ + void fromJson(const json& j) + { + macAddress = jGet(j, "MAC", ""); + ipAddress = jGet(j, "IP", ""); + hostName = jGet(j, "host", ""); + version = jGet(j, "version", ""); + name = jGet(j, "name", ""); + volume = jGet(j, "volume", 1.0); + lastSeen.tv_sec = jGet(j["lastSeen"], "sec", 0); + lastSeen.tv_usec = jGet(j["lastSeen"], "usec", 0); + connected = jGet(j, "connected", true); + } + + json toJson() + { + json j; + j["MAC"] = macAddress; + j["IP"] = ipAddress; + j["host"] = hostName; + j["version"] = version; + j["name"] = name; + j["volume"] = volume; + j["lastSeen"]["sec"] = lastSeen.tv_sec; + j["lastSeen"]["usec"] = lastSeen.tv_usec; + j["connected"] = connected; + return j; + } + + std::string macAddress; + std::string ipAddress; + std::string hostName; + std::string version; + std::string name; + double volume; + timeval lastSeen; + bool connected; +}; + + +class Config +{ +public: + static Config& instance() + { + static Config instance_; + return instance_; + } + + void test(); + +private: + Config(); + + +}; + + +#endif