diff options
author | ancarola <raffaele.ancarola@epfl.ch> | 2019-01-25 22:05:15 +0100 |
---|---|---|
committer | ancarola <raffaele.ancarola@epfl.ch> | 2019-01-25 22:05:15 +0100 |
commit | fe75db9167f4327d2bb2353f94d84047666bb440 (patch) | |
tree | a1f67e5fff1d1f0458ae1ae4fb6e9d4ebf57b58c /test | |
parent | Update to make configure.py to build deps, instead of build.ninja (diff) | |
download | flatland-fe75db9167f4327d2bb2353f94d84047666bb440.tar.gz flatland-fe75db9167f4327d2bb2353f94d84047666bb440.zip |
Core channel in flatland and signal test
Diffstat (limited to 'test')
-rw-r--r-- | test/signal_test.cpp | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/test/signal_test.cpp b/test/signal_test.cpp new file mode 100644 index 0000000..2e17747 --- /dev/null +++ b/test/signal_test.cpp @@ -0,0 +1,101 @@ +#include "core/signal.hpp" +#include "core/task.hpp" +#include "object.h" +#include "flatland.hpp" +#include <iostream> + +using namespace std; +using namespace flat::core; + + +class sender : public object +{ + const char * message; + channel::ptr chan; + +public: + + sender(const char * message, channel::ptr chan) : message(message), chan(chan) + { + } + + void send() + { + signal msg(this, "", (void*)message); + chan->emit(msg); + } +}; + +void function_listener(const object*, signal::package msg) +{ + cout << "Funzione: " << msg.get<const char>() << endl; +}; + +class class_listener +{ + + listener::ptr lis; + +public: + + class_listener(channel::ptr chan) + { + lis = chan->connect(&class_listener::listen, *this); + } + + void listen(const object*, signal::package) + { + cout << "Metodo" << msg.get<const char>() << endl; + } +}; + +/* Objects definition */ + +channel::ptr alpha; +sender * m_sender; +class_listener * m_listener; +listener::ptr f_listener; + +int count = 0; + +void lifeloop() +{ + if (!(count % 10)) + cout << "Step: " << count << endl; + + if (!(count % 40)) + m_sender.send(); + + if (++count > 2000) + { + signal quit(0, "quit"); + + // quit request + flat::core_channel().emit(quit); + } +} + +int main() +{ + FlatWindow win(600, 900, "Test 3"); + flat_status status; + + alpha = channel::create("alpha"); + + // create sender + m_sender = new sender("Ciao", alpha); + m_listener = new class_listener(alpha); + + // Connect listener to alpha channel + f_listener = alpha.connect(&function_listener); + + // bind counter task + task::ptr looptask = flat::main_job().delegate_task(&lifeloop); + + init_flatland(&win, status, 60); + + delete m_sender; + delete m_listener; + + return 0; +} |