You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
2.0 KiB
C

9 months ago
#ifndef __CAC_SERVICE__
#define __CAC_SERVICE__
#include <thread>
#include <mosquitto.h>
#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<std::string, std::string>& 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<std::string, CSyncTable> m_syncTables;
// std::vector<CSyncTable> m_syncRecords;
};
#endif // __CAC_SERVICE__