#include "Sprocket.h" Sprocket::Sprocket(){ Serial.println("init sprocket"); } Sprocket::Sprocket(SprocketConfig cfg){ config = cfg; init(cfg); } Sprocket* Sprocket::init(SprocketConfig cfg){ delay(cfg.startupDelay); Serial.begin(cfg.serialBaudRate); SPIFFS.begin(); return this; } Sprocket* Sprocket::activate() { return activate(&scheduler); } Sprocket* Sprocket::activate(Scheduler* scheduler) { // setup plugins activatePlugins(scheduler); return this; } Sprocket* Sprocket::join(Network& net){ Serial.println("join network"); net.init(&scheduler); //net.onReceive(bind(&Sprocket::dispatch,this, _1, _2)); net.connect(); network = net; return activate(&scheduler); } Sprocket* Sprocket::addTask(Task& tsk){ scheduler.addTask(tsk); tsk.enable(); return this; } void Sprocket::loop(){ scheduler.execute(); } void Sprocket::dispatch( uint32_t from, String &msg ) { currentMessage.fromJsonString(msg); if(currentMessage.valid){ currentMessage.from = from; publish(currentMessage.topic, currentMessage.payload); } } void Sprocket::addPlugin(Plugin* p){ p->mediate(this); plugins.reserve(1); plugins.push_back(p); } void Sprocket::activatePlugins(Scheduler* scheduler){ for(Plugin* p : plugins){ p->activate(scheduler); } }