#ifndef __CAC_SERVICE__ #define __CAC_SERVICE__ #include #include #include "MySQLAdo.h" #define SYNC_CLIENT_CAC_MQTT 10 #define SYNC_QOS_LEVEL_0 0 #define TOPIC_SENSOR "/xy/sensor/device/data/report" #define TOPIC_SENSOR "/xy/evaluation/transformer/results" #define ARG_KEY_MQTT_HOST "mqtthost" #define ARG_KEY_MQTT_PORT "mqttport" #define ARG_KEY_MQTT_USER "mqttuser" #define ARG_KEY_MQTT_PASSWORD "mqttpwd" #define ARG_KEY_DB_HOST "dbhost" #define ARG_KEY_DB_PORT "dbport" #define ARG_KEY_DB_NAME "dbname" #define ARG_KEY_DB_USER "dbuser" #define ARG_KEY_DB_PASSWORD "dbpwd" class CCacService { public: CCacService(); ~CCacService(); bool Start(const std::map& arguments); void Join(); protected: static void cac_message_callback(struct mosquitto *mosq, void *userdata, const struct mosquitto_message *message); static void cac_connect_callback(struct mosquitto *mosq, void *userdata, int result); static void cac_subscribe_callback(struct mosquitto *mosq, void *userdata, int mid, int qos_count, const int *granted_qos); static void cac_log_callback(struct mosquitto *mosq, void *userdata, int level, const char *str); void MessageCallback(struct mosquitto *mosq, const struct mosquitto_message *message); void ConnectCallback(struct mosquitto *mosq, int result); void SubscribeCallback(struct mosquitto *mosq, int mid, int qos_count, const int *granted_qos); void LogCallback(struct mosquitto *mosq, int level, const char *str); void MosquittoLoop(); void ExportLoop(CMySQLAdo* conn); // unsigned int ProcessTable(const std::string& tableName, const CSyncRecord& syncRecord, const CSyncTableFields& syncTable); protected: std::string m_dbHost; std::string m_dbName; std::string m_dbUser; std::string m_dbPassword; bool m_session; struct mosquitto* m_mosq; std::thread m_mosqThread; std::thread m_exportThread; std::map m_syncTables; // std::vector m_syncRecords; }; #endif // __CAC_SERVICE__