|
|
|
#ifndef __LORA_MATT_H__
|
|
|
|
#define __LORA_MATT_H__
|
|
|
|
|
|
|
|
#define MAX_STRINGVEC_SIZE 2
|
|
|
|
#include "lora-socket.h"
|
|
|
|
|
|
|
|
|
|
|
|
class LoRaMQTT{
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
inline void ini(){
|
|
|
|
socket.ini();
|
|
|
|
socket.onReceived(_onReceived);
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void core(){
|
|
|
|
if(isLoopMode){
|
|
|
|
if(socket.isNewMsg()){
|
|
|
|
String msg = "", from = "", to = "", type = "";
|
|
|
|
socket.getNewMsg(msg, from, to, type);
|
|
|
|
_onReceived(msg, from, to, type);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
socket.core();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline void publish(const String& subject, const String& content){
|
|
|
|
String s = subject + "$" + content;
|
|
|
|
socket.udp(s);
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void subscribe(const String& subject){
|
|
|
|
this->_subjects.PushBack(subject);
|
|
|
|
}
|
|
|
|
|
|
|
|
inline static void onReceived(void (*f)(String, String)){
|
|
|
|
_f = f;
|
|
|
|
}
|
|
|
|
inline bool isNewMsg(){
|
|
|
|
isLoopMode = true;
|
|
|
|
return (newSubject == "") ? false : true;
|
|
|
|
};
|
|
|
|
inline void getNewMsg(String& subject, String& content){
|
|
|
|
subject = newSubject;
|
|
|
|
content = newContent;
|
|
|
|
clearNewMsg();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
static LoRaSocket socket;
|
|
|
|
static StringVec _subjects;
|
|
|
|
static void (*_f)(String, String);
|
|
|
|
static String newSubject, newContent;
|
|
|
|
static bool isLoopMode;
|
|
|
|
|
|
|
|
inline void clearNewMsg(){
|
|
|
|
newSubject = "";
|
|
|
|
newContent = "";
|
|
|
|
};
|
|
|
|
|
|
|
|
inline static void _onReceived(String msg, String from, String to, String type){
|
|
|
|
|
|
|
|
if(msg.indexOf('$') == -1) return;
|
|
|
|
String subject = msg.substring(0, msg.indexOf('$'));
|
|
|
|
String content = msg.substring(msg.indexOf('$') + 1, msg.length());
|
|
|
|
|
|
|
|
if(_subjects.Find("#") != -1 || _subjects.Find(subject) != -1){
|
|
|
|
newSubject = subject;
|
|
|
|
newContent = content;
|
|
|
|
if(!isLoopMode) _f(subject, content);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
LoRaSocket LoRaMQTT::socket;
|
|
|
|
StringVec LoRaMQTT::_subjects;
|
|
|
|
void (*LoRaMQTT::_f)(String, String);
|
|
|
|
String LoRaMQTT::newSubject = "", LoRaMQTT::newContent = "";
|
|
|
|
bool LoRaMQTT::isLoopMode = false;
|
|
|
|
|
|
|
|
#endif //__LORA_MATT_H__
|