[C++] Piszemy aplikację pogodową, część 2
W tym wpisie stworzymy kod odpowiadający za konfigurację naszej aplikacji, a będą to pliki config.hpp i config.cpp. Kod ten zawierał będzie deklarację klasy Config z dwiema metodami: create_default_configuration oraz get_option. Pierwsza metoda ma za zadanie stworzyć plik config.cfg z domyślną konfiguracją. Metoda get_option będzie służyła do pobierania danej opcji.
Plik config.hpp
W tym pliku dołączamy bibliotekę iostream i cstdlib oraz deklarujemy klasę i jej metody.
#ifndef CONFIG_HPP
#define CONFIG_HPP
#include <iostream>
#include <cstdlib>
using namespace std;
class Config {
public:
void create_default_configuration();
public:
string get_option(string option_name);
};
#endif
Plik config.cpp
W tym pliku dołączamy wcześniej utworzony plik nagłówkowy config.hpp, bibliotekę filesystem, bibliotekę fstream oraz tworzymy logikę metod klasy Config. UWAGA! Nie zapomnij w miejsce "ApiKey" wpisać swój API key wygenerowany w panelu OpenWeather.
#include "config.hpp"
#include <experimental/filesystem>
#include <fstream>
void Config::create_default_configuration() {
if(!std::experimental::filesystem::exists("config.cfg")) {
fstream config_file;
config_file.open("config.cfg", ios::out);
if(config_file.good()) {
config_file << "weather_data_url=https://api.openweathermap.org/data/2.5/weather?q=Warszawa&units=metric&mode=json&lang=pl&appid=ApiKey\n";
config_file << "get_weather_interval=30\n";
config_file.close();
}
}
}
string Config::get_option(string option_name) {
int separator_position;
string line;
fstream config_file;
config_file.open("config.cfg", ios::in);
if(config_file.good()) {
while(getline(config_file, line)) {
separator_position = line.find('=');
string name = line.substr(0, separator_position);
string option_value = line.substr(separator_position + 1);
if(name != option_name) {
continue;
}
return option_value;
}
}
return "";
}
Teraz opiszę pokrótce jakie zadanie mają poszczególne metody. Metoda Config::create_default_configuration ma za zadanie sprawdzić czy istnieje plik config.cfg, a jeśli nie to go utworzyć z domyślną zawartością, czyli wierszami zawierającymi opcje konfiguracyjne. Pierwszym ustawieniem jest weather_data_url - url, z którego będą pobierane dane pogodowe. Druga opcja to get_weather_interval - interwał z jakim będą odświeżane dane. Kolejna metoda - Config::get_option ma za zadanie odczytać plik konfiguracyjny, a następnie pobrać wiersze, odczytać z nich ustawienia i zwrócić wymaganą wartość. Funkcja ta przyjmuje jeden argument - string option_name - nazwa ustawienia.
Komentarze
Prześlij komentarz
Dzięki za komentarz!