Files
sprocket-core/src/Sprocket.cpp

73 lines
1.6 KiB
C++

#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);
}
}
}