spejsiot/spejsiot/Endpoint.cpp

34 lines
928 B
C++

#include <SpejsNode.h>
#include <Endpoint.h>
void Endpoint::bind(String _name, SpejsNode* _parent) {
parent = _parent;
name = _name;
}
void Endpoint::notify(String property, String value) {
if(parent)
parent->notify(name + "/" + property, value);
}
void Endpoint::onConnected() {
parent->subscribe(name + "/+/set");
parent->notify(name + "/$type", type);
}
void Endpoint::onMessage(String topic, String payload) {
String devicePrefix = parent->DEV_TOPIC("");
if(!topic.startsWith(devicePrefix)) {
return;
}
int propPos = topic.indexOf("/", devicePrefix.length());
String endpoint = topic.substring(devicePrefix.length(), propPos);
String property = topic.substring(propPos+1, topic.indexOf("/", propPos+1));
if(name.equals(endpoint)) {
debugf("%s - %s response: %d\n", endpoint.c_str(), property.c_str(), onValue(property, payload).status);
}
}