Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
181 changes: 163 additions & 18 deletions src/config/Config.cpp
Original file line number Diff line number Diff line change
@@ -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<CameraData> 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!";
}


}



}
138 changes: 117 additions & 21 deletions src/config/Config.h
Original file line number Diff line number Diff line change
@@ -1,21 +1,117 @@
#pragma once
#include "ofMain.h"

namespace iFish
{
typedef shared_ptr<class Config> ConfigPtr;

class Config
{
public:
Config();

ofEvent<void> loadCompleteEvent;
ofEvent<void> 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<int> trackColorMin;
vector<int> trackColorMax;
int trackUpdateMs;
int trackThresholdMin;
int trackThresholdMax;
};

struct ArtData
{
int artDrawNumber;
int artFboUpdateMs;
vector<ofColor> palletes;
};

struct PlannerData
{
int drawTimeMax;
bool saveArtAtEndDay;
};

typedef shared_ptr<class Config> ConfigPtr;



class Config

{

public:

Config();
vector<CameraData> getCamerasData() const;
ArtData getArtData() const;
PlannerData getPlannerData() const;

ofEvent<void> loadCompleteEvent;
ofEvent<void> loadErrorEvent;

virtual void load();


virtual ~Config();

private:

vector<CameraData> 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