mirror of
https://gitlab.com/wirelos/sprocket-lib.git
synced 2025-12-16 13:25:03 +01:00
73 lines
1.6 KiB
C++
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);
|
|
}
|
|
}
|
|
} |