[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

Popular

[C++] Jak obliczyć pole i obwód trapezu?

[HTML] Jak wyśrodkować tekst?

[PHP] Jak pobrać adres strony?