From bb81391d008aa9769ca20bc74432e033db5d1692 Mon Sep 17 00:00:00 2001 From: Patrick Balsiger Date: Mon, 5 Nov 2018 16:47:52 +0100 Subject: [PATCH] use mediator to distribute messages via dispatch method --- include/readme.txt | 39 +++++++++++++++++++++++++++++++++++++++ src/Sprocket.cpp | 18 ++++-------------- src/Sprocket.h | 2 ++ src/WiFiNet.cpp | 4 ++-- 4 files changed, 47 insertions(+), 16 deletions(-) create mode 100644 include/readme.txt diff --git a/include/readme.txt b/include/readme.txt new file mode 100644 index 0000000..194dcd4 --- /dev/null +++ b/include/readme.txt @@ -0,0 +1,39 @@ + +This directory is intended for project header files. + +A header file is a file containing C declarations and macro definitions +to be shared between several project source files. You request the use of a +header file in your project source file (C, C++, etc) located in `src` folder +by including it, with the C preprocessing directive `#include'. + +```src/main.c + +#include "header.h" + +int main (void) +{ + ... +} +``` + +Including a header file produces the same results as copying the header file +into each source file that needs it. Such copying would be time-consuming +and error-prone. With a header file, the related declarations appear +in only one place. If they need to be changed, they can be changed in one +place, and programs that include the header file will automatically use the +new version when next recompiled. The header file eliminates the labor of +finding and changing all the copies as well as the risk that a failure to +find one copy will result in inconsistencies within a program. + +In C, the usual convention is to give header files names that end with `.h'. +It is most portable to use only letters, digits, dashes, and underscores in +header file names, and at most one dot. + +Read more about using header files in official GCC documentation: + +* Include Syntax +* Include Operation +* Once-Only Headers +* Computed Includes + +https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html diff --git a/src/Sprocket.cpp b/src/Sprocket.cpp index c5b30b8..27c942e 100644 --- a/src/Sprocket.cpp +++ b/src/Sprocket.cpp @@ -44,10 +44,10 @@ void Sprocket::loop(){ } void Sprocket::dispatch( uint32_t from, String &msg ) { - SprocketMessage mMsg; - mMsg.fromJsonString(msg); - if(mMsg.valid){ - dispatchMessageToPlugins(mMsg); + currentMessage.fromJsonString(msg); + if(currentMessage.valid){ + currentMessage.from = from; + publish(currentMessage.topic, currentMessage.payload); } } @@ -61,14 +61,4 @@ 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); - } - } } \ No newline at end of file diff --git a/src/Sprocket.h b/src/Sprocket.h index a685210..56388af 100644 --- a/src/Sprocket.h +++ b/src/Sprocket.h @@ -25,6 +25,8 @@ class Sprocket : public Mediator { // => see difference between standalone and mesh sprochet usage of scheduler Scheduler scheduler; Network network; + private: + SprocketMessage currentMessage; public: SprocketConfig config; std::vector plugins; diff --git a/src/WiFiNet.cpp b/src/WiFiNet.cpp index bc21cff..e2e7a68 100644 --- a/src/WiFiNet.cpp +++ b/src/WiFiNet.cpp @@ -59,8 +59,8 @@ int WiFiNet::createAccessPoint(){ WiFi.disconnect(); WiFi.mode(WIFI_AP); WiFi.softAP(config.apSSID.c_str(), config.apPassword.c_str()); - Serial.println("SoftAP IP address: "); - Serial.println(WiFi.softAPIP().toString()); + String softApPrt = "SoftAP IP: " + WiFi.softAPIP().toString(); + Serial.println(softApPrt.c_str()); return 1; }