From 7fa67408931535dd105c39ee0705c50d25e362cb Mon Sep 17 00:00:00 2001 From: ackimixs Date: Wed, 22 May 2024 13:06:54 +0200 Subject: [PATCH] update --- .../CLParser/include/Modelec/CLParser/Type.h | 10 +- example/client.example.cpp | 92 ++++++++++--------- example/parser.example.cpp | 2 +- 3 files changed, 61 insertions(+), 43 deletions(-) diff --git a/components/CLParser/include/Modelec/CLParser/Type.h b/components/CLParser/include/Modelec/CLParser/Type.h index 15ba313..dfc7822 100644 --- a/components/CLParser/include/Modelec/CLParser/Type.h +++ b/components/CLParser/include/Modelec/CLParser/Type.h @@ -15,7 +15,7 @@ enum ParameterType CONST_CHAR_PTR }; -template struct ParameterTypeTraits {}; +template struct ParameterTypeTraits {}; template<> struct ParameterTypeTraits { static constexpr ParameterType type = STRING; @@ -56,3 +56,11 @@ template<> struct ParameterTypeTraits { template<> struct ParameterTypeTraits { static constexpr ParameterType type = CONST_CHAR_PTR; }; + +template struct ParameterTypeTraits>> { + static constexpr ParameterType type = STRING; +}; + +template struct ParameterTypeTraits>> { + static constexpr ParameterType type = INT; +}; diff --git a/example/client.example.cpp b/example/client.example.cpp index c2b14b0..f72438c 100644 --- a/example/client.example.cpp +++ b/example/client.example.cpp @@ -6,60 +6,70 @@ #include #include -std::atomic running(true); +std::atomic shouldStop = false; -void signalHandler(int signal) { - running = false; +void signalHandler( int signum ) { + shouldStop = true; +} + +void messageHandler(TCPClient& client) { + std::string message; + + while (!shouldStop && !client.shouldStop()) { + std::getline(std::cin, message); + + if (message == "quit") { + client.stop(); + break; + } + if (message == "ready") { + client.sendMessage("lidar;strat;ready;1"); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + client.sendMessage("aruco;strat;ready;1"); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + client.sendMessage("arduino;strat;ready;1"); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + client.sendMessage("tirette;strat;ready;1"); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + client.sendMessage("servo_moteur;strat;ready;1"); + } else if (message == "pong") { + client.sendMessage("lidar;ihm;pong;1"); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + client.sendMessage("aruco;ihm;pong;1"); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + client.sendMessage("arduino;ihm;pong;1"); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + client.sendMessage("tirette;ihm;pong;1"); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + client.sendMessage("servo_moteur;ihm;pong;1"); + } else { + client.sendMessage(message); + } + } } int main(int argc, char* argv[]) { signal(SIGINT, signalHandler); - CLParser parser(argc, argv); + CLParser clParser(argc, argv); - int port = parser.getOption("port", 8080); + int port = clParser.getOption("port", 8080); - bool loggerMode = parser.hasOption("logger"); + auto host = clParser.getOption("host", "127.0.0.1"); - TCPClient client("127.0.0.1", port); // Replace "127.0.0.1" with the IP address of your server and 8080 with the port number + bool loggerMode = clParser.hasOption("logger"); + + TCPClient client(host, port); // Replace "127.0.0.1" with the IP address of your server and 8080 with the port number client.start(); - while (!client.shouldStop() && !running) { - if (loggerMode) { - usleep(500'000); - } else { - std::string message; - std::getline(std::cin, message); + if (!loggerMode) { + std::thread messageThread(messageHandler, std::ref(client)); + messageThread.detach(); + } - if (message == "quit") { - client.stop(); - break; - } - if (message == "ready") { - client.sendMessage("lidar;strat;ready;1"); - std::this_thread::sleep_for(std::chrono::milliseconds(100)); - client.sendMessage("aruco;strat;ready;1"); - std::this_thread::sleep_for(std::chrono::milliseconds(100)); - client.sendMessage("arduino;strat;ready;1"); - std::this_thread::sleep_for(std::chrono::milliseconds(100)); - client.sendMessage("tirette;strat;ready;1"); - std::this_thread::sleep_for(std::chrono::milliseconds(100)); - client.sendMessage("servo_moteur;strat;ready;1"); - } else if (message == "pong") { - client.sendMessage("lidar;ihm;pong;1"); - std::this_thread::sleep_for(std::chrono::milliseconds(100)); - client.sendMessage("aruco;ihm;pong;1"); - std::this_thread::sleep_for(std::chrono::milliseconds(100)); - client.sendMessage("arduino;ihm;pong;1"); - std::this_thread::sleep_for(std::chrono::milliseconds(100)); - client.sendMessage("tirette;ihm;pong;1"); - std::this_thread::sleep_for(std::chrono::milliseconds(100)); - client.sendMessage("servo_moteur;ihm;pong;1"); - } else { - client.sendMessage(message); - } - } + while (!client.shouldStop() && !shouldStop) { + usleep(500'000); } return 0; diff --git a/example/parser.example.cpp b/example/parser.example.cpp index c663289..d87efa3 100644 --- a/example/parser.example.cpp +++ b/example/parser.example.cpp @@ -13,7 +13,7 @@ int main(int argc, char* argv[]) { std::cout << "Port : " << port << std::endl; - auto test = parser.getOption("long"); + auto test = parser.getOption("long"); if (test.has_value()) { std::cout << test.value() << std::endl;