feat: register tasks outside of main
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
#include "ClusterManager.h"
|
||||
|
||||
ClusterManager::ClusterManager(NodeContext& ctx) : ctx(ctx) {
|
||||
ClusterManager::ClusterManager(NodeContext& ctx, TaskManager& taskMgr) : ctx(ctx), taskManager(taskMgr) {
|
||||
// Register callback for node_discovered event
|
||||
ctx.on("node_discovered", [this](void* data) {
|
||||
NodeInfo* node = static_cast<NodeInfo*>(data);
|
||||
@@ -8,6 +8,27 @@ ClusterManager::ClusterManager(NodeContext& ctx) : ctx(ctx) {
|
||||
});
|
||||
}
|
||||
|
||||
void ClusterManager::registerTasks() {
|
||||
// Register all cluster-related tasks using std::bind
|
||||
taskManager.registerTask("discovery_send", ctx.config.discovery_interval_ms,
|
||||
std::bind(&ClusterManager::sendDiscovery, this));
|
||||
taskManager.registerTask("discovery_listen", ctx.config.discovery_interval_ms / 10,
|
||||
std::bind(&ClusterManager::listenForDiscovery, this));
|
||||
taskManager.registerTask("status_update", ctx.config.status_update_interval_ms,
|
||||
std::bind([](ClusterManager* cm) {
|
||||
cm->updateAllNodeStatuses();
|
||||
cm->removeDeadNodes();
|
||||
}, this));
|
||||
taskManager.registerTask("print_members", ctx.config.print_interval_ms,
|
||||
std::bind(&ClusterManager::printMemberList, this));
|
||||
taskManager.registerTask("heartbeat", ctx.config.heartbeat_interval_ms,
|
||||
std::bind(&ClusterManager::heartbeatTaskCallback, this));
|
||||
taskManager.registerTask("update_members_info", ctx.config.member_info_update_interval_ms,
|
||||
std::bind(&ClusterManager::updateAllMembersInfoTaskCallback, this));
|
||||
|
||||
Serial.println("[ClusterManager] Registered all cluster tasks");
|
||||
}
|
||||
|
||||
void ClusterManager::sendDiscovery() {
|
||||
//Serial.println("[Cluster] Sending discovery packet...");
|
||||
ctx.udp->beginPacket("255.255.255.255", ctx.config.udp_port);
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "Globals.h"
|
||||
#include "NodeContext.h"
|
||||
#include "NodeInfo.h"
|
||||
#include "TaskManager.h"
|
||||
#include <Arduino.h>
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <ArduinoJson.h>
|
||||
@@ -10,7 +11,8 @@
|
||||
|
||||
class ClusterManager {
|
||||
public:
|
||||
ClusterManager(NodeContext& ctx);
|
||||
ClusterManager(NodeContext& ctx, TaskManager& taskMgr);
|
||||
void registerTasks();
|
||||
void sendDiscovery();
|
||||
void listenForDiscovery();
|
||||
void addOrUpdateNode(const String& nodeHost, IPAddress nodeIP);
|
||||
@@ -24,4 +26,5 @@ public:
|
||||
void updateAllMembersInfoTaskCallback();
|
||||
private:
|
||||
NodeContext& ctx;
|
||||
TaskManager& taskManager;
|
||||
};
|
||||
|
||||
20
src/main.cpp
20
src/main.cpp
@@ -11,30 +11,16 @@ using namespace std;
|
||||
|
||||
NodeContext ctx;
|
||||
NetworkManager network(ctx);
|
||||
ClusterManager cluster(ctx);
|
||||
TaskManager taskManager(ctx);
|
||||
ClusterManager cluster(ctx, taskManager);
|
||||
ApiServer apiServer(ctx, taskManager, ctx.config.api_server_port);
|
||||
|
||||
void setup() {
|
||||
// Setup WiFi first
|
||||
network.setupWiFi();
|
||||
|
||||
// Register all system tasks using std::bind for member functions
|
||||
taskManager.registerTask("discovery_send", ctx.config.discovery_interval_ms,
|
||||
std::bind(&ClusterManager::sendDiscovery, &cluster));
|
||||
taskManager.registerTask("discovery_listen", ctx.config.discovery_interval_ms / 10,
|
||||
std::bind(&ClusterManager::listenForDiscovery, &cluster));
|
||||
taskManager.registerTask("status_update", ctx.config.status_update_interval_ms,
|
||||
std::bind([](ClusterManager* cm) {
|
||||
cm->updateAllNodeStatuses();
|
||||
cm->removeDeadNodes();
|
||||
}, &cluster));
|
||||
taskManager.registerTask("print_members", ctx.config.print_interval_ms,
|
||||
std::bind(&ClusterManager::printMemberList, &cluster));
|
||||
taskManager.registerTask("heartbeat", ctx.config.heartbeat_interval_ms,
|
||||
std::bind(&ClusterManager::heartbeatTaskCallback, &cluster));
|
||||
taskManager.registerTask("update_members_info", ctx.config.member_info_update_interval_ms,
|
||||
std::bind(&ClusterManager::updateAllMembersInfoTaskCallback, &cluster));
|
||||
// Register tasks in their respective classes
|
||||
cluster.registerTasks();
|
||||
|
||||
// Initialize and start all tasks
|
||||
taskManager.initialize();
|
||||
|
||||
Reference in New Issue
Block a user