/* * Copyright (C) 2015, 2016 "IoT.bzh" * Author "Romain Forlot" * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * 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 #include #include #include #include #include #include #include extern "C" { #define AFB_BINDING_VERSION 2 #include }; struct TimedEvent { int interval; afb_event event; std::string name; std::string eventName; }; struct Signal { std::string name; std::string source; std::string sig_class; std::string type; }; 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 events; std::map> timedEvents; std::map> registeredObjects; std::map> lowMessagesToObjects; std::set timers; std::string generateId() const; json_object *generateJson(const std::string &messageObject, std::vector *fields = nullptr); void registerObjects(const std::string& uri, std::map& properties); std::map> loadDefinitions(json_object* definitionsJ) const; void loadResources(json_object* resourcesJ, std::map>& properties); int subscribeRegisteredObjects() const; };