diff --git a/src/config/Config.cpp b/src/config/Config.cpp index 74259bd..c5bd479 100644 --- a/src/config/Config.cpp +++ b/src/config/Config.cpp @@ -1,18 +1,163 @@ -#include "Config.h" - -using namespace iFish; - -Config::Config() -{ - ofLog(ofLogLevel::OF_LOG_NOTICE, "Config init"); -} - -void Config::load() -{ - ofNotifyEvent(loadCompleteEvent, this); -} - -Config::~Config() -{ - -} +#include "Config.h" + + + + +using namespace iFish; + +LoadType loadType = LoadType::Url; +CameraData cameraData; +ArtData artData; +PlannerData plannerData; + + +Config::Config() + +{ + + ofLog(ofLogLevel::OF_LOG_NOTICE, "Config init"); + +} + + + +void Config::load() + +{ + + ofNotifyEvent(loadCompleteEvent, this); + +} + + + +Config::~Config() + +{ + + +} + +vector Config::getCamerasData() const + +{ + + return CamerasData; +} + + +ArtData Config::getArtData() const + +{ + return artData; + +} + +PlannerData Config::getPlannerData() const + +{ + return plannerData; + + +} + +void ConfigParser::parse(ConfigPtr config, const string& configString) { + switch(loadType) + { + case(LoadType::LocalFile): + { + parsingSuccessful = json.openLocal(configString); + + if (parsingSuccessful) + { + ofLogNotice("ofApp::setup") << json.getRawString(true); + } + else { + ofLogNotice("ofApp::setup") << "Failed to parse JSON."; + } + + cameraData.width = json["CameraData"]["width"].asInt(); + cameraData.height = json["CameraData"]["height"].asInt(); + std::string trackColorMin = json["CameraData"]["trackColorMin"].asString(); + std::string trackColorMax = json["CameraData"]["trackColorMax"].asString(); + cameraData.trackUpdateMs = json["CameraData"]["trackUpdateMs"].asInt(); + cameraData.trackThresholdMin = json["CameraData"]["trackThresholdMin"].asInt(); + cameraData.trackThresholdMax = json["CameraData"]["trackThresholdMax"].asInt(); + + artData.artDrawNumber = json["ArtData"]["artDrawNumber"].asInt(); + artData.artFboUpdateMs = json["ArtData"]["artFboUpdateMs"].asInt(); + std::string palletesPath = json["ArtData"]["palletesPath"].asString(); + + plannerData.drawTimeMax = json["PlannerData"]["drawTimeMax"].asInt(); + plannerData.saveArtAtEndDay = json["PlannerData"]["saveArtAtEndDay"].asBool(); + } + + case(LoadType::Url): + + { + parsingSuccessful = json.open(configString); + + if (parsingSuccessful) + { + ofLogNotice("ofApp::setup") << json.getRawString(true); + } + else { + ofLogNotice("ofApp::setup") << "Failed to parse JSON."; + } + + cameraData.width = json["CameraData"]["width"].asInt(); + cameraData.height = json["CameraData"]["height"].asInt(); + std::string trackColorMin = json["CameraData"]["trackColorMin"].asString(); + std::string trackColorMax = json["CameraData"]["trackColorMax"].asString(); + cameraData.trackUpdateMs = json["CameraData"]["trackUpdateMs"].asInt(); + cameraData.trackThresholdMin = json["CameraData"]["trackThresholdMin"].asInt(); + cameraData.trackThresholdMax = json["CameraData"]["trackThresholdMax"].asInt(); + + artData.artDrawNumber = json["ArtData"]["artDrawNumber"].asInt(); + artData.artFboUpdateMs = json["ArtData"]["artFboUpdateMs"].asInt(); + std::string palletesPath = json["ArtData"]["palletesPath"].asString(); + + plannerData.drawTimeMax = json["PlannerData"]["drawTimeMax"].asInt(); + plannerData.saveArtAtEndDay = json["PlannerData"]["saveArtAtEndDay"].asBool(); + + } + + case(LoadType::Resource): + { + parsingSuccessful = json.open(configString); + + if (parsingSuccessful) + { + ofLogNotice("ofApp::setup") << json.getRawString(true); + } + else { + ofLogNotice("ofApp::setup") << "Failed to parse JSON."; + } + + cameraData.width = json["CameraData"]["width"].asInt(); + cameraData.height = json["CameraData"]["height"].asInt(); + std::string trackColorMin = json["CameraData"]["trackColorMin"].asString(); + std::string trackColorMax = json["CameraData"]["trackColorMax"].asString(); + cameraData.trackUpdateMs = json["CameraData"]["trackUpdateMs"].asInt(); + cameraData.trackThresholdMin = json["CameraData"]["trackThresholdMin"].asInt(); + cameraData.trackThresholdMax = json["CameraData"]["trackThresholdMax"].asInt(); + + artData.artDrawNumber = json["ArtData"]["artDrawNumber"].asInt(); + artData.artFboUpdateMs = json["ArtData"]["artFboUpdateMs"].asInt(); + std::string palletesPath = json["ArtData"]["palletesPath"].asString(); + + plannerData.drawTimeMax = json["PlannerData"]["drawTimeMax"].asInt(); + plannerData.saveArtAtEndDay = json["PlannerData"]["saveArtAtEndDay"].asBool(); + } + + case(LoadType::None): + { + ofLogNotice("ofApp::setup") << "There is no file to parse!"; + } + + + } + + + +} diff --git a/src/config/Config.h b/src/config/Config.h index 8bdb89a..64abd23 100644 --- a/src/config/Config.h +++ b/src/config/Config.h @@ -1,21 +1,117 @@ -#pragma once -#include "ofMain.h" - -namespace iFish -{ - typedef shared_ptr ConfigPtr; - - class Config - { - public: - Config(); - - ofEvent loadCompleteEvent; - ofEvent loadErrorEvent; - - virtual void load(); - - virtual ~Config(); - }; -} - +#pragma once + +#include "ofMain.h" +#include "ofxJSON.h" + +namespace iFish +{ + + enum class LoadType + { + None, + LocalFile, + Url, + Resource + + }; + + struct CameraData + { + int width; + int height; + vector trackColorMin; + vector trackColorMax; + int trackUpdateMs; + int trackThresholdMin; + int trackThresholdMax; + }; + + struct ArtData + { + int artDrawNumber; + int artFboUpdateMs; + vector palletes; + }; + + struct PlannerData + { + int drawTimeMax; + bool saveArtAtEndDay; + }; + + typedef shared_ptr ConfigPtr; + + + + class Config + + { + + public: + + Config(); + vector getCamerasData() const; + ArtData getArtData() const; + PlannerData getPlannerData() const; + + ofEvent loadCompleteEvent; + ofEvent loadErrorEvent; + + virtual void load(); + + + virtual ~Config(); + + private: + + vector CamerasData; + }; + + + class ConfigController + + { + + public: + + ConfigController(); + void init(const string& path, LoadType type = LoadType::LocalFile); + void onConfigLoadSuccess(string& rawConfig); + void onConfigLoadError(); + + virtual void load(); + virtual ~ConfigController(); + + private: + string configPath; + ConfigLoader configLoader; + ConfigParser configParser; + ConfigPtr config; + + }; + + class ConfigLoader + + { + + public: + + void load(const string& param, LoadType type = LoadType::LocalFile); + + }; + + class ConfigParser + + { + + public: + + void parse(ConfigPtr config, const string& configString); + + private: + ofxJSONElement json; + bool parsingSuccessful; + }; + +} +#pragma once