#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, Network* network) { // setup plugins activatePlugins(scheduler, network); return this; } Sprocket* Sprocket::join(Network& net){ Serial.println("join network"); net.init(&scheduler); //net.onReceive(bind(&Sprocket::dispatch,this, _1, _2)); net.connect(); return activate(&scheduler, &net); } 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 ) { SprocketMessage mMsg; mMsg.fromJsonString(msg); if(mMsg.valid){ dispatchMessageToPlugins(mMsg); } } void Sprocket::addPlugin(Plugin* p){ p->mediate(this); plugins.reserve(1); plugins.push_back(p); } void Sprocket::activatePlugins(Scheduler* scheduler, Network* network){ for(Plugin* p : plugins){ p->activate(scheduler, network); } } // TODO remove plugin dispatching and onMessage in favor of mediator pub/sub void Sprocket::dispatchMessageToPlugins(SprocketMessage msg){ if(msg.type != SprocketMessage::NONE){ // baaaa for(Plugin* p : plugins){ //Serial.println("dispatch to plugins"); p->onMessage(msg); } } }