diff options
Diffstat (limited to 'signal-composer-binding/signal-composer.hpp')
-rw-r--r-- | signal-composer-binding/signal-composer.hpp | 92 |
1 files changed, 39 insertions, 53 deletions
diff --git a/signal-composer-binding/signal-composer.hpp b/signal-composer-binding/signal-composer.hpp index bcfe60f..44b958f 100644 --- a/signal-composer-binding/signal-composer.hpp +++ b/signal-composer-binding/signal-composer.hpp @@ -13,60 +13,46 @@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - */ - #pragma once +*/ +#pragma once - #include <cstddef> - #include <string> - #include <vector> - #include <set> - #include <map> - #include <json-c/json.h> - #include <systemd/sd-event.h> - extern "C" - { - #define AFB_BINDING_VERSION 2 - #include <afb/afb-binding.h> - }; +#include <memory> +#include <vector> +#include <string> +#include <ctl-config.h> +#include <json-c/json.h> +#include <systemd/sd-event.h> - struct TimedEvent { - int interval; - afb_event event; - std::string name; - std::string eventName; - }; +#include "source.hpp" +#include "signal-composer-binding.hpp" - struct Signal { - std::string name; - std::string source; - std::string sig_class; - std::string type; - }; +class bindingApp +{ +private: + CtlConfigT* ctlConfig_; - class SignalComposer - { - public: - SignalComposer(); - void treatMessage(json_object *message); - bool subscribe(afb_req request); - bool unsubscribe(afb_req request); - bool get(afb_req request, json_object **json); - void tick(sd_event_source *source, const long &now, void *interv); - void startTimer(const int &t); - ~SignalComposer(); - int parseConfigAndSubscribe(const std::string& confd); - static bool startsWith(const std::string &s, const std::string &val); - static void callBackFromSubscribe(void *handle, int iserror, json_object *result); - private: - std::map<std::string, afb_event> events; - std::map<int, std::vector<TimedEvent>> timedEvents; - std::map<std::string, std::map<std::string, Signal>> registeredObjects; - std::map<std::string, std::set<std::string>> lowMessagesToObjects; - std::set<int> timers; - std::string generateId() const; - json_object *generateJson(const std::string &messageObject, std::vector<std::string> *fields = nullptr); - void registerObjects(const std::string& uri, std::map<std::string, Signal>& properties); - std::map<std::string, std::map<std::string, Signal>> loadDefinitions(json_object* definitionsJ) const; - void loadResources(json_object* resourcesJ, std::map<std::string, std::map<std::string, Signal>>& properties); - int subscribeRegisteredObjects() const; - }; + static CtlSectionT ctlSections_[]; ///< Config Section definition (note: controls section index should match handle retrieval in) + std::vector<Source> sourcesList_; + + explicit bindingApp(const std::string& filepath); + bindingApp(); + ~bindingApp(); + + CtlActionT* convert2Action(const std::string& name, json_object* action); + + int loadOneSource(json_object* sourcesJ); + static int loadSources(CtlSectionT* section, json_object *sectionJ); + + int loadOneSignal(json_object* signalsJ); + static int loadSignals(CtlSectionT* section, json_object *sectionJ); + + Source* getSource(const std::string& api); + +public: + static bindingApp& instance(); + void loadConfig(const std::string& filepath); + void loadSignalsFile(std::string signalsFile); + + std::vector<std::shared_ptr<Signal>> getAllSignals(); + CtlConfigT* ctlConfig(); +}; |