waterish_os_rev3_public/libraries/ESP8266_MQTT_Mesh/src/ESP8266MQTTMeshBuilder.h

143 lines
3.8 KiB
C++

#ifndef _ESP8266MQTTMESHBUILDER_H_
#define _ESP8266MQTTMESHBUILDER_H_
class ESP8266MQTTMesh::Builder {
private:
const wifi_conn *networks;
const char *mqtt_server;
int mqtt_port;
const char *mqtt_username;
const char *mqtt_password;
const char *mesh_ssid;
const char *mesh_password;
int mesh_port;
const char *inTopic;
const char *outTopic;
unsigned int firmware_id;
const char *firmware_ver;
#if ASYNC_TCP_SSL_ENABLED
bool mqtt_secure;
ssl_cert_t mesh_secure;
const uint8_t *mqtt_fingerprint;
void fix_mqtt_port() { if (! mqtt_port) mqtt_port = mqtt_secure ? 8883 : 1883; };
#else
void fix_mqtt_port() { if (! mqtt_port) mqtt_port = 1883; };
#endif
public:
Builder(const wifi_conn *networks,
const char *mqtt_server,
int mqtt_port = 0):
networks(networks),
mqtt_server(mqtt_server),
mqtt_port(mqtt_port),
mqtt_username(NULL),
mqtt_password(NULL),
firmware_id(0),
firmware_ver(NULL),
mesh_ssid("esp8266_mqtt_mesh"),
mesh_password("ESP8266MQTTMesh"),
mesh_port(1884),
#if ASYNC_TCP_SSL_ENABLED
mqtt_secure(false),
mqtt_fingerprint(NULL),
mesh_secure({NULL, NULL, NULL, 0, 0}),
#endif
inTopic("esp8266-in/"),
outTopic("esp8266-out/")
{}
Builder& setVersion(const char *firmware_ver, int firmware_id) {
this->firmware_id = firmware_id;
this->firmware_ver = firmware_ver;
return *this;
}
Builder& setMqttAuth(const char *username, const char *password) {
this->mqtt_username = username;
this->mqtt_password = password;
return *this;
}
Builder& setMeshSSID(const char *ssid) { this->mesh_ssid = ssid; return *this; }
Builder& setMeshPassword(const char *password) { this->mesh_password = password; return *this; }
Builder& setMeshPort(int port) { this->mesh_port = port; return *this; }
Builder& setTopic(const char *inTopic, const char *outTopic) {
this->inTopic = inTopic;
this->outTopic = outTopic;
return *this;
}
#if ASYNC_TCP_SSL_ENABLED
Builder& setMqttSSL(bool enable, const uint8_t *fingerprint) {
this->mqtt_secure = enable;
this->mqtt_fingerprint = fingerprint;
return *this;
}
Builder & setMeshSSL(const uint8_t *ssl_cert, uint32_t ssl_cert_len,
const uint8_t *ssl_key, uint32_t ssl_key_len,
const uint8_t *ssl_fingerprint) {
this->mesh_secure.cert = ssl_cert;
this->mesh_secure.key = ssl_key;
this->mesh_secure.fingerprint = ssl_fingerprint;
this->mesh_secure.cert_len = ssl_cert_len;
this->mesh_secure.key_len = ssl_key_len;
return *this;
}
#endif
ESP8266MQTTMesh build() {
fix_mqtt_port();
return( ESP8266MQTTMesh(
networks,
mqtt_server,
mqtt_port,
mqtt_username,
mqtt_password,
firmware_ver,
firmware_id,
mesh_ssid,
mesh_password,
mesh_port,
#if ASYNC_TCP_SSL_ENABLED
mqtt_secure,
mqtt_fingerprint,
mesh_secure,
#endif
inTopic,
outTopic));
}
ESP8266MQTTMesh *buildptr() {
fix_mqtt_port();
return( new ESP8266MQTTMesh(
networks,
mqtt_server,
mqtt_port,
mqtt_username,
mqtt_password,
firmware_ver,
firmware_id,
mesh_ssid,
mesh_password,
mesh_port,
#if ASYNC_TCP_SSL_ENABLED
mqtt_secure,
mqtt_fingerprint,
mesh_secure,
#endif
inTopic,
outTopic));
}
};
#endif //_ESP8266MQTTMESHBUILDER_H_