From 3cf00b41013b350c8cce8e7ce32a4491288ac0f6 Mon Sep 17 00:00:00 2001
From: Nicolas Pope <nwpope@utu.fi>
Date: Tue, 4 Jun 2019 20:00:11 +0300
Subject: [PATCH] Initial net slave code for #54

---
 applications/vision/src/main.cpp             |  3 +-
 components/net/cpp/CMakeLists.txt            |  1 +
 components/net/cpp/include/ftl/net/slave.hpp | 19 +++++++++++++
 components/net/cpp/src/slave.cpp             | 29 ++++++++++++++++++++
 4 files changed, 51 insertions(+), 1 deletion(-)
 create mode 100644 components/net/cpp/include/ftl/net/slave.hpp
 create mode 100644 components/net/cpp/src/slave.cpp

diff --git a/applications/vision/src/main.cpp b/applications/vision/src/main.cpp
index cc52052f6..149dceba5 100644
--- a/applications/vision/src/main.cpp
+++ b/applications/vision/src/main.cpp
@@ -24,6 +24,7 @@
 #include <ftl/display.hpp>
 #include <ftl/rgbd_streamer.hpp>
 #include <ftl/net/universe.hpp>
+#include <ftl/net/slave.hpp>
 #include <nlohmann/json.hpp>
 
 #include "opencv2/imgproc.hpp"
@@ -80,7 +81,7 @@ void disparityToDepth(const cv::Mat &disparity, cv::Mat &depth, const cv::Mat &q
 
 static void run(ftl::Configurable *root) {
 	Universe *net = ftl::create<Universe>(root, "net");
-	LOG(INFO) << "Net started.";
+	ftl::net::Slave slave(net, root);
 
 	auto paths = root->get<vector<string>>("paths");
 	string file = "";
diff --git a/components/net/cpp/CMakeLists.txt b/components/net/cpp/CMakeLists.txt
index c7e8bb341..ef4a7aaba 100644
--- a/components/net/cpp/CMakeLists.txt
+++ b/components/net/cpp/CMakeLists.txt
@@ -9,6 +9,7 @@ add_library(ftlnet
 	src/dispatcher.cpp
 	src/universe.cpp
 	src/ws_internal.cpp
+	src/slave.cpp
 )
 
 target_include_directories(ftlnet PUBLIC
diff --git a/components/net/cpp/include/ftl/net/slave.hpp b/components/net/cpp/include/ftl/net/slave.hpp
new file mode 100644
index 000000000..d973f6aef
--- /dev/null
+++ b/components/net/cpp/include/ftl/net/slave.hpp
@@ -0,0 +1,19 @@
+#ifndef _FTL_NET_SLAVE_HPP_
+#define _FTL_NET_SLAVE_HPP_
+
+#include <ftl/net/universe.hpp>
+#include <ftl/configurable.hpp>
+
+namespace ftl {
+namespace net {
+
+class Slave {
+	public:
+	Slave(Universe *, ftl::Configurable *);
+	~Slave();
+};
+
+}
+}
+
+#endif  // _FTL_NET_SLAVE_HPP_
diff --git a/components/net/cpp/src/slave.cpp b/components/net/cpp/src/slave.cpp
new file mode 100644
index 000000000..77394adc7
--- /dev/null
+++ b/components/net/cpp/src/slave.cpp
@@ -0,0 +1,29 @@
+#include <ftl/net/slave.hpp>
+#include <loguru.hpp>
+
+using ftl::Configurable;
+using ftl::net::Universe;
+using ftl::net::Slave;
+
+static void netLog(void* user_data, const loguru::Message& message) {
+	Universe *net = (Universe*)user_data;
+	net->publish("log", message.preamble, message.message);
+}
+
+Slave::Slave(Universe *net, ftl::Configurable *root) {
+	net->bind("restart", []() {
+		LOG(WARNING) << "Remote restart...";
+		exit(1);
+	});
+
+	net->bind("shutdown", []() {
+		LOG(WARNING) << "Remote shutdown...";
+		exit(0);
+	});
+
+	loguru::add_callback("net_log", netLog, net, loguru::Verbosity_INFO);
+}
+
+Slave::~Slave() {
+
+}
-- 
GitLab