Commit daa339b0c2f2193b64fa15c6b1cb4b0e8024937a
1 parent
54f45b27
random stuff
Showing
5 changed files
with
40 additions
and
5 deletions
main.cpp
| @@ -5,7 +5,7 @@ | @@ -5,7 +5,7 @@ | ||
| 5 | 5 | ||
| 6 | #include "mainapp.h" | 6 | #include "mainapp.h" |
| 7 | 7 | ||
| 8 | -static MainApp mainApp; | 8 | +MainApp *mainApp = MainApp::getMainApp(); |
| 9 | 9 | ||
| 10 | static void signal_handler(int signal) | 10 | static void signal_handler(int signal) |
| 11 | { | 11 | { |
| @@ -19,7 +19,7 @@ static void signal_handler(int signal) | @@ -19,7 +19,7 @@ static void signal_handler(int signal) | ||
| 19 | } | 19 | } |
| 20 | else if (signal == SIGTERM || signal == SIGINT) | 20 | else if (signal == SIGTERM || signal == SIGINT) |
| 21 | { | 21 | { |
| 22 | - mainApp.quit(); | 22 | + mainApp->quit(); |
| 23 | } | 23 | } |
| 24 | else | 24 | else |
| 25 | { | 25 | { |
| @@ -59,7 +59,7 @@ int main() | @@ -59,7 +59,7 @@ int main() | ||
| 59 | try | 59 | try |
| 60 | { | 60 | { |
| 61 | check<std::runtime_error>(register_signal_handers()); | 61 | check<std::runtime_error>(register_signal_handers()); |
| 62 | - mainApp.start(); | 62 | + mainApp->start(); |
| 63 | } | 63 | } |
| 64 | catch (std::exception &ex) | 64 | catch (std::exception &ex) |
| 65 | { | 65 | { |
mainapp.cpp
| @@ -4,6 +4,8 @@ | @@ -4,6 +4,8 @@ | ||
| 4 | #define MAX_EVENTS 1024 | 4 | #define MAX_EVENTS 1024 |
| 5 | #define NR_OF_THREADS 4 | 5 | #define NR_OF_THREADS 4 |
| 6 | 6 | ||
| 7 | +MainApp *MainApp::instance = nullptr; | ||
| 8 | + | ||
| 7 | void do_thread_work(ThreadData *threadData) | 9 | void do_thread_work(ThreadData *threadData) |
| 8 | { | 10 | { |
| 9 | int epoll_fd = threadData->epollfd; | 11 | int epoll_fd = threadData->epollfd; |
| @@ -86,6 +88,14 @@ MainApp::MainApp() : | @@ -86,6 +88,14 @@ MainApp::MainApp() : | ||
| 86 | 88 | ||
| 87 | } | 89 | } |
| 88 | 90 | ||
| 91 | +MainApp *MainApp::getMainApp() | ||
| 92 | +{ | ||
| 93 | + if (instance == nullptr) | ||
| 94 | + instance = new MainApp(); | ||
| 95 | + | ||
| 96 | + return instance; | ||
| 97 | +} | ||
| 98 | + | ||
| 89 | void MainApp::start() | 99 | void MainApp::start() |
| 90 | { | 100 | { |
| 91 | int listen_fd = check<std::runtime_error>(socket(AF_INET, SOCK_STREAM, 0)); | 101 | int listen_fd = check<std::runtime_error>(socket(AF_INET, SOCK_STREAM, 0)); |
mainapp.h
| @@ -17,15 +17,19 @@ | @@ -17,15 +17,19 @@ | ||
| 17 | #include "mqttpacket.h" | 17 | #include "mqttpacket.h" |
| 18 | #include "subscriptionstore.h" | 18 | #include "subscriptionstore.h" |
| 19 | 19 | ||
| 20 | - | ||
| 21 | class MainApp | 20 | class MainApp |
| 22 | { | 21 | { |
| 22 | + static MainApp *instance; | ||
| 23 | + | ||
| 23 | bool running = true; | 24 | bool running = true; |
| 24 | std::vector<std::shared_ptr<ThreadData>> threads; | 25 | std::vector<std::shared_ptr<ThreadData>> threads; |
| 25 | std::shared_ptr<SubscriptionStore> subscriptionStore; | 26 | std::shared_ptr<SubscriptionStore> subscriptionStore; |
| 26 | 27 | ||
| 27 | -public: | ||
| 28 | MainApp(); | 28 | MainApp(); |
| 29 | +public: | ||
| 30 | + MainApp(const MainApp &rhs) = delete; | ||
| 31 | + MainApp(MainApp &&rhs) = delete; | ||
| 32 | + static MainApp *getMainApp(); | ||
| 29 | void start(); | 33 | void start(); |
| 30 | void quit(); | 34 | void quit(); |
| 31 | }; | 35 | }; |
utils.cpp
| 1 | #include "utils.h" | 1 | #include "utils.h" |
| 2 | 2 | ||
| 3 | 3 | ||
| 4 | + | ||
| 5 | +std::list<std::__cxx11::string> split(const std::string &input, const char sep, size_t max, bool keep_empty_parts) | ||
| 6 | +{ | ||
| 7 | + std::list<std::string> list; | ||
| 8 | + size_t start = 0; | ||
| 9 | + size_t end; | ||
| 10 | + | ||
| 11 | + while (list.size() < max && (end = input.find(sep, start)) != std::string::npos) | ||
| 12 | + { | ||
| 13 | + if (start != end || keep_empty_parts) | ||
| 14 | + list.push_back(input.substr(start, end - start)); | ||
| 15 | + start = end + 1; // increase by length of seperator. | ||
| 16 | + } | ||
| 17 | + if (start != input.size() || keep_empty_parts) | ||
| 18 | + list.push_back(input.substr(start, std::string::npos)); | ||
| 19 | + return list; | ||
| 20 | +} |
utils.h
| @@ -4,6 +4,8 @@ | @@ -4,6 +4,8 @@ | ||
| 4 | #include <string.h> | 4 | #include <string.h> |
| 5 | #include <errno.h> | 5 | #include <errno.h> |
| 6 | #include <string> | 6 | #include <string> |
| 7 | +#include <list> | ||
| 8 | +#include <limits> | ||
| 7 | 9 | ||
| 8 | template<typename T> int check(int rc) | 10 | template<typename T> int check(int rc) |
| 9 | { | 11 | { |
| @@ -17,4 +19,6 @@ template<typename T> int check(int rc) | @@ -17,4 +19,6 @@ template<typename T> int check(int rc) | ||
| 17 | return rc; | 19 | return rc; |
| 18 | } | 20 | } |
| 19 | 21 | ||
| 22 | +std::list<std::string> split(const std::string &input, const char sep, size_t max = std::numeric_limits<int>::max(), bool keep_empty_parts = true); | ||
| 23 | + | ||
| 20 | #endif // UTILS_H | 24 | #endif // UTILS_H |