summaryrefslogtreecommitdiff
path: root/src/KingSystem/Utils/Thread/MessageDispatcher.cpp
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2021-02-01 01:51:19 +0100
committerGitHub <noreply@github.com>2021-02-01 01:51:19 +0100
commit76b9041c7846567c72b727c73f51b9f4f681ec2b (patch)
treeb84febbc61f81301224882da85e92c9a759b0ae5 /src/KingSystem/Utils/Thread/MessageDispatcher.cpp
parenteaa0f651efa89bd6bff75fcbb482fc57a5b7d77a (diff)
parentfb09e658e2ab42fb0177f89c831cb2b78692bf07 (diff)
Merge pull request #25 from leoetlino/message-dispatcher
ksys: Add several MessageDispatcher functions
Diffstat (limited to 'src/KingSystem/Utils/Thread/MessageDispatcher.cpp')
-rw-r--r--src/KingSystem/Utils/Thread/MessageDispatcher.cpp46
1 files changed, 44 insertions, 2 deletions
diff --git a/src/KingSystem/Utils/Thread/MessageDispatcher.cpp b/src/KingSystem/Utils/Thread/MessageDispatcher.cpp
index a43a1596..cbd4f905 100644
--- a/src/KingSystem/Utils/Thread/MessageDispatcher.cpp
+++ b/src/KingSystem/Utils/Thread/MessageDispatcher.cpp
@@ -1,10 +1,13 @@
#include "KingSystem/Utils/Thread/MessageDispatcher.h"
+#include <heap/seadHeapMgr.h>
+#include <prim/seadMemUtil.h>
+#include <thread/seadThread.h>
+#include "KingSystem/Utils/HeapUtil.h"
+#include "KingSystem/Utils/SafeDelete.h"
#include "KingSystem/Utils/Thread/Message.h"
namespace ksys {
-SEAD_SINGLETON_DISPOSER_IMPL(MessageDispatcher)
-
MessageDispatcher::Queue::Queue() = default;
MessageDispatcher::Queue::~Queue() {
@@ -69,6 +72,10 @@ void MessageDispatcher::DoubleBufferedQueue::processQueue(MessageProcessor& proc
MessageDispatcher::Queues::DummyLogger::~DummyLogger() = default;
+MessageDispatcher::Logger::~Logger() = default;
+
+void MessageDispatcher::Logger::log(const Message& message, bool success) {}
+
MessageDispatcher::MainQueue::MainQueue() = default;
MessageDispatcher::MainQueue::~MainQueue() = default;
@@ -111,4 +118,39 @@ MessageDispatcher::Queues::~Queues() {
mMainQueue.clear();
}
+SEAD_SINGLETON_DISPOSER_IMPL(MessageDispatcher)
+
+MessageDispatcher::~MessageDispatcher() {
+ mBools.freeBuffer();
+ mBoolBuffer.freeBuffer();
+ util::safeDelete(mQueues);
+}
+
+void MessageDispatcher::init(const InitArg& arg, sead::Heap* heap) {
+ heap = util::getHeapOrCurrentHeap(heap);
+ sead::ScopedCurrentHeapSetter heap_setter{heap};
+
+ if (arg.set_instance)
+ setAsGlobalInstance();
+
+ mQueues = new (heap) Queues(&mLogger);
+
+ mUpdateEndEvent.initialize(true);
+ mUpdateEndEvent.setSignal();
+
+ mBoolBuffer.allocBufferAssert(arg.num_bools, heap);
+ sead::MemUtil::fillZero(mBoolBuffer.getBufferPtr(), mBoolBuffer.getByteSize());
+
+ mBools.allocBuffer(arg.num_bools, heap);
+ for (int i = 0, n = mBoolBuffer.size(); i < n; ++i) {
+ mBools.emplaceBack(&mBoolBuffer[i]);
+ }
+
+ mFlags.set(Flag::Initialized);
+}
+
+bool MessageDispatcher::isProcessingOnCurrentThread() const {
+ return mProcessingThread == sead::ThreadMgr::instance()->getCurrentThread();
+}
+
} // namespace ksys