Local fixes
MQTTClient.h
- Committer:
- hudakz
- Date:
- 2019-09-12
- Revision:
- 5:361a6987739b
- Parent:
- 4:8620de6d1696
File content as of revision 5:361a6987739b:
/* MQTTClient.h - A simple client for MQTT. Nicholas O'Leary http://knolleary.net Ported to mbed by Zoltan Hudak <hudakz@outlook.com> */ #ifndef MQTTClient_h #define MQTTClient_h #include "mbed.h" #include "TcpClient.h" #define MQTT_MAX_PACKET_SIZE 256 // MQTT_MAX_PACKET_SIZE : Maximum packet size #define MQTT_KEEPALIVE 15 // MQTT_KEEPALIVE : keepAlive interval in Seconds #define MQTTPROTOCOLVERSION 3 #define MQTTCONNECT 1 << 4 // Client request to connect to Server #define MQTTCONNACK 2 << 4 // Connect Acknowledgment #define MQTTPUBLISH 3 << 4 // Publish message #define MQTTPUBACK 4 << 4 // Publish Acknowledgment #define MQTTPUBREC 5 << 4 // Publish Received (assured delivery part 1) #define MQTTPUBREL 6 << 4 // Publish Release (assured delivery part 2) #define MQTTPUBCOMP 7 << 4 // Publish Complete (assured delivery part 3) #define MQTTSUBSCRIBE 8 << 4 // Client Subscribe request #define MQTTSUBACK 9 << 4 // Subscribe Acknowledgment #define MQTTUNSUBSCRIBE 10 << 4 // Client Unsubscribe request #define MQTTUNSUBACK 11 << 4 // Unsubscribe Acknowledgment #define MQTTPINGREQ 12 << 4 // PING Request #define MQTTPINGRESP 13 << 4 // PING Response #define MQTTDISCONNECT 14 << 4 // Client is Disconnecting #define MQTTReserved 15 << 4 // Reserved #define MQTTQOS0 0 << 1 #define MQTTQOS1 1 << 1 #define MQTTQOS2 2 << 1 class MQTTClient { TcpClient _client; uint8_t _buffer[MQTT_MAX_PACKET_SIZE]; uint16_t _nextMsgId; time_t _lastOutActivity; time_t _lastInActivity; bool _pingOutstanding; IpAddress _ip; char* _domain; uint16_t _port; Stream* _stream; uint16_t _readPacket(uint8_t*); uint8_t _readByte(); bool _write(uint8_t header, uint8_t* buf, uint16_t length); uint16_t _writeString(const char* string, uint8_t* buf, uint16_t length); Callback<void (char*, uint8_t*, uint16_t)> _onMessage; public: MQTTClient(); MQTTClient(IpAddress& ip, uint16_t port); MQTTClient(IpAddress& ip, uint16_t port , Stream& stream); MQTTClient(const char* domain, uint16_t port); MQTTClient(const char* domain, uint16_t port, Stream& stream); bool connect(const char*); bool connect(const char* , const char* , const char*); bool connect(const char* , const char* , uint8_t, uint8_t, const char*); bool connect(const char* , const char* , const char* , const char* , uint8_t, uint8_t, const char*); void disconnect(); bool publish(const char* , const char*); bool publish(const char* , uint8_t* , uint16_t); bool publish(const char* , uint8_t* , uint16_t, bool); bool subscribe(const char*); bool subscribe(const char* , uint8_t qos); bool unsubscribe(const char*); bool poll(); bool connected(); void attach(Callback<void (char*, uint8_t*, uint16_t)>); template<typename T, typename M> void attach(T *obj, M method ) { attach(callback(obj, method)); } }; #endif