summaryrefslogtreecommitdiffstats
path: root/signal-composer-binding/signal-composer.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'signal-composer-binding/signal-composer.hpp')
-rw-r--r--signal-composer-binding/signal-composer.hpp92
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();
+};