#ifndef ENDPOINT_H #define ENDPOINT_H #include class SpejsNode; class EndpointResult { public: int status; String description; EndpointResult(int _status) : status(_status) {} EndpointResult(int _status, String _description) : status(_status), description(_description) {} }; class Endpoint { protected: SpejsNode* parent; String name; public: String type; Endpoint(String _type = "unknown") : type(_type) { } virtual void bind(String _name, SpejsNode* _parent); void notify(String property, String value); virtual void onMessage(String topic, String payload); virtual EndpointResult onValue(String property, String value) { return 400; } virtual void onConnected(); static Endpoint* fromJSON(JsonObject& obj) { return NULL; } }; template class ValueEndpoint : public Endpoint { protected: T value; void updateValue(T newValue); public: ValueEndpoint(String _type) : Endpoint(_type) {} }; typedef Endpoint* (*EndpointInitializer) (JsonObject&); #endif