Add event
This commit is contained in:
@ -80,15 +80,17 @@ target_compile_definitions(TessesFramework PUBLIC TESSESFRAMEWORK_CERT_BUNDLE_FI
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(TESSESFRAMEWORK_FETCHCONTENT)
|
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(
|
FetchContent_Declare(
|
||||||
mbedtls
|
mbedtls
|
||||||
GIT_REPOSITORY https://github.com/Mbed-TLS/mbedtls.git
|
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)
|
FetchContent_MakeAvailable(mbedtls)
|
||||||
else()
|
else()
|
||||||
set(MBEDTLS_DIR "" CACHE PATH "Mbed tls directory")
|
set(MBEDTLS_DIR "" CACHE PATH "Mbed tls directory")
|
||||||
@ -254,6 +256,8 @@ if(TESSESFRAMEWORK_ENABLE_EXAMPLES)
|
|||||||
add_executable(wsecho examples/wsecho.cpp)
|
add_executable(wsecho examples/wsecho.cpp)
|
||||||
target_link_libraries(wsecho PUBLIC tessesframework)
|
target_link_libraries(wsecho PUBLIC tessesframework)
|
||||||
|
|
||||||
|
add_executable(runevent examples/runevent.cpp)
|
||||||
|
target_link_libraries(runevent PUBLIC tessesframework)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(TESSESFRAMEWORK_ENABLE_APPS)
|
if(TESSESFRAMEWORK_ENABLE_APPS)
|
||||||
|
|||||||
22
examples/runevent.cpp
Normal file
22
examples/runevent.cpp
Normal file
@ -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<FunctionalEvent<uint64_t>>([](uint64_t n)->void {
|
||||||
|
std::cout << n << std::endl;
|
||||||
|
});
|
||||||
|
OnItteraton += event;
|
||||||
|
|
||||||
|
|
||||||
|
auto event2 = std::make_shared<FunctionalEvent<uint64_t>>([&event](uint64_t n)->void{
|
||||||
|
if(n == 10000) OnItteraton -= event;
|
||||||
|
});
|
||||||
|
OnItteraton += event2;
|
||||||
|
|
||||||
|
|
||||||
|
TF_RunEventLoop();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
@ -7,7 +7,7 @@
|
|||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
class TextException : public std::exception {
|
class TextException : public std::exception {
|
||||||
|
|
||||||
@ -29,6 +29,60 @@
|
|||||||
};
|
};
|
||||||
namespace Tesses::Framework
|
namespace Tesses::Framework
|
||||||
{
|
{
|
||||||
|
template<typename...TArgs>
|
||||||
|
class Event {
|
||||||
|
public:
|
||||||
|
virtual void Invoke(TArgs... args)=0;
|
||||||
|
virtual ~Event()
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
template<typename...TArgs>
|
||||||
|
class FunctionalEvent : public Event<TArgs...> {
|
||||||
|
std::function<void(TArgs...)> cb;
|
||||||
|
public:
|
||||||
|
FunctionalEvent(std::function<void(TArgs...)> cb)
|
||||||
|
{
|
||||||
|
this->cb = cb;
|
||||||
|
}
|
||||||
|
void Invoke(TArgs... args)
|
||||||
|
{
|
||||||
|
this->cb(args...);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename...TArgs>
|
||||||
|
class EventList : public Event<TArgs...> {
|
||||||
|
std::vector<std::shared_ptr<Event<TArgs...>>> items;
|
||||||
|
public:
|
||||||
|
void operator+=(std::shared_ptr<Event<TArgs...>> event)
|
||||||
|
{
|
||||||
|
for(std::shared_ptr<Event<TArgs...>>& item : this->items)
|
||||||
|
{
|
||||||
|
if(item.get() == event.get()) return;
|
||||||
|
}
|
||||||
|
this->items.push_back(event);
|
||||||
|
}
|
||||||
|
void operator-=(std::shared_ptr<Event<TArgs...>> 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<uint64_t> OnItteraton;
|
||||||
void TF_Init();
|
void TF_Init();
|
||||||
void TF_InitWithConsole();
|
void TF_InitWithConsole();
|
||||||
void TF_ConnectToSelf(uint16_t port);
|
void TF_ConnectToSelf(uint16_t port);
|
||||||
|
|||||||
@ -36,7 +36,7 @@ static GXRModeObj *rmode = NULL;
|
|||||||
|
|
||||||
namespace Tesses::Framework
|
namespace Tesses::Framework
|
||||||
{
|
{
|
||||||
|
EventList<uint64_t> OnItteraton;
|
||||||
#if defined(TESSESFRAMEWORK_ENABLE_THREADING) && (defined(GEKKO) || defined(__SWITCH__))
|
#if defined(TESSESFRAMEWORK_ENABLE_THREADING) && (defined(GEKKO) || defined(__SWITCH__))
|
||||||
namespace Threading
|
namespace Threading
|
||||||
{
|
{
|
||||||
@ -71,8 +71,11 @@ namespace Tesses::Framework
|
|||||||
bool initedConsole=false;
|
bool initedConsole=false;
|
||||||
PadState default_pad;
|
PadState default_pad;
|
||||||
#endif
|
#endif
|
||||||
|
uint64_t ittr=0;
|
||||||
void TF_RunEventLoopItteration()
|
void TF_RunEventLoopItteration()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
OnItteraton.Invoke(ittr++);
|
||||||
#if defined(TESSESFRAMEWORK_ENABLE_THREADING) && (defined(GEKKO) || defined(__SWITCH__))
|
#if defined(TESSESFRAMEWORK_ENABLE_THREADING) && (defined(GEKKO) || defined(__SWITCH__))
|
||||||
Tesses::Framework::Threading::LookForFinishedThreads();
|
Tesses::Framework::Threading::LookForFinishedThreads();
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user