From fd4bcb7ecd79d286cd8a8960d0f2bfb319ca2ba5 Mon Sep 17 00:00:00 2001 From: "Tristan B. Kildaire" Date: Tue, 31 Aug 2021 11:48:26 +0200 Subject: [PATCH] Added multi-threaded dispatcher --- source/eventy/engine.d | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/source/eventy/engine.d b/source/eventy/engine.d index 02dd551..846a26c 100644 --- a/source/eventy/engine.d +++ b/source/eventy/engine.d @@ -1,11 +1,12 @@ module eventy.engine; import eventy.queues : Queue; -import eventy.signal : Signal; +import eventy.signal : Signal, EventHandler; import eventy.event : Event; import std.container.dlist; import core.sync.mutex : Mutex; +import core.thread : Thread; /** * Engine @@ -68,6 +69,44 @@ public final class Engine } } + /** + * Dispatch(Signal[] set, Event e) + * + * Creates a new thread per signal and dispatches the event to them + * + * TODO: Add ability to dispatch on this thread + */ + private void dispatch(Signal[] signalSet, Event e) + { + foreach(Signal signal; signalSet) + { + /* Create a new Thread */ + Thread handlerThread = getThread(signal, e); + + /* Start the thread */ + handlerThread.start(); + } + } + + private Thread getThread(Signal signal, Event e) + { + Thread signalHandlerThread = new class Thread + { + this() + { + super(&worker); + } + + public void worker() + { + EventHandler handler = signal.getHandler(); + handler(e); + } + }; + + return signalHandlerThread; + } + private Signal[] getSignalsForEvent(Event e) { /* Matched handlers */