From 8dc8b9ea86abb1f9f643f798494d446b803852af Mon Sep 17 00:00:00 2001 From: Mike Nolan Date: Fri, 6 Jun 2025 23:13:31 -0500 Subject: [PATCH] Add event --- CMakeLists.txt | 14 +++++--- examples/runevent.cpp | 22 ++++++++++++ include/TessesFramework/Common.hpp | 56 +++++++++++++++++++++++++++++- src/TF_Init.cpp | 5 ++- 4 files changed, 90 insertions(+), 7 deletions(-) create mode 100644 examples/runevent.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 4e572a4..e1c0718 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,15 +80,17 @@ target_compile_definitions(TessesFramework PUBLIC TESSESFRAMEWORK_CERT_BUNDLE_FI endif() if(TESSESFRAMEWORK_FETCHCONTENT) - +set(MBEDTLS_FATAL_WARNINGS OFF) +set(ENABLE_TESTING OFF) +set(ENABLE_PROGRAMS OFF) +if(TESSESFRAMEWORK_ENABLE_SHARED) +set(USE_SHARED_MBEDTLS_LIBRARY ON) +endif() FetchContent_Declare( mbedtls GIT_REPOSITORY https://github.com/Mbed-TLS/mbedtls.git ) -set(MBEDTLS_FATAL_WARNINGS OFF) -set(ENABLE_TESTING OFF) -set(ENABLE_PROGRAMS OFF) -set(USE_SHARED_MBEDTLS_LIBRARY ON) + FetchContent_MakeAvailable(mbedtls) else() set(MBEDTLS_DIR "" CACHE PATH "Mbed tls directory") @@ -254,6 +256,8 @@ if(TESSESFRAMEWORK_ENABLE_EXAMPLES) add_executable(wsecho examples/wsecho.cpp) target_link_libraries(wsecho PUBLIC tessesframework) + add_executable(runevent examples/runevent.cpp) + target_link_libraries(runevent PUBLIC tessesframework) endif() if(TESSESFRAMEWORK_ENABLE_APPS) diff --git a/examples/runevent.cpp b/examples/runevent.cpp new file mode 100644 index 0000000..1efb605 --- /dev/null +++ b/examples/runevent.cpp @@ -0,0 +1,22 @@ +#include "TessesFramework/TessesFramework.hpp" +using namespace Tesses::Framework; +int main(int argc, char** argv) +{ + TF_Init(); + auto event = std::make_shared>([](uint64_t n)->void { + std::cout << n << std::endl; + }); + OnItteraton += event; + + + auto event2 = std::make_shared>([&event](uint64_t n)->void{ + if(n == 10000) OnItteraton -= event; + }); + OnItteraton += event2; + + + TF_RunEventLoop(); + + return 0; + +} \ No newline at end of file diff --git a/include/TessesFramework/Common.hpp b/include/TessesFramework/Common.hpp index f41a5ba..20a22f4 100644 --- a/include/TessesFramework/Common.hpp +++ b/include/TessesFramework/Common.hpp @@ -7,7 +7,7 @@ #include #include #include - +#include class TextException : public std::exception { @@ -29,6 +29,60 @@ }; namespace Tesses::Framework { + template + class Event { + public: + virtual void Invoke(TArgs... args)=0; + virtual ~Event() + {} + }; + template + class FunctionalEvent : public Event { + std::function cb; + public: + FunctionalEvent(std::function cb) + { + this->cb = cb; + } + void Invoke(TArgs... args) + { + this->cb(args...); + } + }; + + template + class EventList : public Event { + std::vector>> items; + public: + void operator+=(std::shared_ptr> event) + { + for(std::shared_ptr>& item : this->items) + { + if(item.get() == event.get()) return; + } + this->items.push_back(event); + } + void operator-=(std::shared_ptr> event) + { + for(auto i = this->items.begin(); i != this->items.end(); i++) + { + if(i->get() == event.get()) + { + this->items.erase(i); + return; + } + } + } + void Invoke(TArgs... args) + { + for(auto& item : this->items) + { + item->Invoke(args...); + } + } + }; + + extern EventList OnItteraton; void TF_Init(); void TF_InitWithConsole(); void TF_ConnectToSelf(uint16_t port); diff --git a/src/TF_Init.cpp b/src/TF_Init.cpp index ce408c7..e0df690 100644 --- a/src/TF_Init.cpp +++ b/src/TF_Init.cpp @@ -36,7 +36,7 @@ static GXRModeObj *rmode = NULL; namespace Tesses::Framework { - + EventList OnItteraton; #if defined(TESSESFRAMEWORK_ENABLE_THREADING) && (defined(GEKKO) || defined(__SWITCH__)) namespace Threading { @@ -71,8 +71,11 @@ namespace Tesses::Framework bool initedConsole=false; PadState default_pad; #endif + uint64_t ittr=0; void TF_RunEventLoopItteration() { + + OnItteraton.Invoke(ittr++); #if defined(TESSESFRAMEWORK_ENABLE_THREADING) && (defined(GEKKO) || defined(__SWITCH__)) Tesses::Framework::Threading::LookForFinishedThreads(); #endif