35 lines
971 B
C++
35 lines
971 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)) {
|
|
Serial.println("ignoring");
|
|
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)) {
|
|
Serial.printf("%s - %s response: %d\n", endpoint.c_str(), property.c_str(), onValue(property, payload).status);
|
|
}
|
|
}
|