ksys: Add several MessageDispatcher functions

This commit is contained in:
Léo Lam 2021-01-31 22:15:46 +01:00
parent eaa0f651ef
commit fb09e658e2
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
4 changed files with 97 additions and 16 deletions

View File

@ -92631,16 +92631,16 @@
0x00000071011f4a58,sub_71011F4A58,72,_ZN4ksys17MessageDispatcher9MainQueue10addMessageERKNS_7MessageE
0x00000071011f4aa0,sub_71011F4AA0,112,_ZN4ksys17MessageDispatcher9MainQueue12processQueueERNS_16MessageProcessorE
0x00000071011f4b10,nullsub_4669,4,_ZN4ksys17MessageDispatcher6Queues11DummyLogger3logERKNS_7MessageEb
0x00000071011f4b14,nullsub_4670,4,
0x00000071011f4b18,j__ZdlPv_1220,4,
0x00000071011f4b1c,nullsub_4671,4,
0x00000071011f4b20,sub_71011F4B20,100,
0x00000071011f4b84,sub_71011F4B84,108,
0x00000071011f4bf0,GlobalMessage::createInstance,224,
0x00000071011f4cd0,GlobalMessage::dtor,228,
0x00000071011f4db4,GlobalMessage::dtorDelete,36,
0x00000071011f4dd8,GlobalMessage::init,580,
0x00000071011f501c,GlobalMessage::currentTlsSlotIsSame,56,
0x00000071011f4b14,nullsub_4670,4,_ZN4ksys17MessageDispatcher6LoggerD1Ev
0x00000071011f4b18,j__ZdlPv_1220,4,_ZN4ksys17MessageDispatcher6LoggerD0Ev
0x00000071011f4b1c,nullsub_4671,4,_ZN4ksys17MessageDispatcher6Logger3logERKNS_7MessageEb
0x00000071011f4b20,sub_71011F4B20,100,_ZN4ksys17MessageDispatcher18SingletonDisposer_D2Ev
0x00000071011f4b84,sub_71011F4B84,108,_ZN4ksys17MessageDispatcher18SingletonDisposer_D0Ev
0x00000071011f4bf0,GlobalMessage::createInstance,224,_ZN4ksys17MessageDispatcher14createInstanceEPN4sead4HeapE
0x00000071011f4cd0,GlobalMessage::dtor,228,_ZN4ksys17MessageDispatcherD1Ev
0x00000071011f4db4,GlobalMessage::dtorDelete,36,_ZN4ksys17MessageDispatcherD0Ev
0x00000071011f4dd8,GlobalMessage::init,580,_ZN4ksys17MessageDispatcher4initERKNS0_7InitArgEPN4sead4HeapE
0x00000071011f501c,GlobalMessage::currentTlsSlotIsSame,56,_ZNK4ksys17MessageDispatcher27isProcessingOnCurrentThreadEv
0x00000071011f5054,GlobalMessage::x,376,
0x00000071011f51cc,GlobalMessage::x_0,344,
0x00000071011f5324,GlobalMessage::x_1,124,
@ -92648,10 +92648,10 @@
0x00000071011f548c,GlobalMessage::x_2,208,
0x00000071011f555c,GlobalMessage::x_3,268,
0x00000071011f5668,GlobalMessage::x_4,248,
0x00000071011f5760,GlobalMessage::rtti1,204,
0x00000071011f582c,GlobalMessage::rtti2,92,
0x00000071011f5760,GlobalMessage::rtti1,204,_ZNK4ksys17MessageDispatcher27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
0x00000071011f582c,GlobalMessage::rtti2,92,_ZNK4ksys17MessageDispatcher18getRuntimeTypeInfoEv
0x00000071011f5888,j__ZdlPv_1221,4,_ZN4ksys17MessageDispatcher6Queues11DummyLoggerD0Ev
0x00000071011f588c,sub_71011F588C,140,
0x00000071011f588c,sub_71011F588C,140,_ZNK4sead15RuntimeTypeInfo6DeriveIN4ksys21MessageDispatcherBaseEE9isDerivedEPKNS0_9InterfaceE
0x00000071011f5918,sub_71011F5918,240,_ZN4ksys17MessageDispatcher5QueueD1Ev
0x00000071011f5a08,sub_71011F5A08,240,_ZN4ksys17MessageDispatcher5QueueD0Ev
0x00000071011f5af8,sub_71011F5AF8,460,_ZN4ksys17MessageDispatcher5Queue10addMessageERKNS_7MessageE

Can't render this file because it is too large.

@ -1 +1 @@
Subproject commit 9ce3831edcb432942600283f33ebc93c0b810d29
Subproject commit 1737b022c7b70c04cc2471ff58d00ead1b6b6a93

View File

@ -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

View File

@ -1,12 +1,20 @@
#pragma once
#include <container/seadBuffer.h>
#include <container/seadObjList.h>
#include <heap/seadDisposer.h>
#include <prim/seadRuntimeTypeInfo.h>
#include <prim/seadTypedBitFlag.h>
#include <thread/seadCriticalSection.h>
#include "KingSystem/Utils/Thread/Event.h"
#include "KingSystem/Utils/Thread/MessageDispatcherBase.h"
#include "KingSystem/Utils/Thread/MessageProcessor.h"
#include "KingSystem/Utils/UniqueArrayPtr.h"
namespace sead {
class Thread;
}
namespace ksys {
class Message;
@ -19,6 +27,18 @@ class MessageDispatcher : public MessageDispatcherBase {
~MessageDispatcher() override;
public:
struct InitArg {
// TODO: rename
int num1;
int num2;
int num_bools;
bool set_instance;
};
void init(const InitArg& arg, sead::Heap* heap);
bool isProcessingOnCurrentThread() const;
void registerTransceiver(MessageReceiverEx& receiver) override;
void deregisterTransceiver(MessageReceiverEx& receiver) override;
bool sendMessage(const MesTransceiverId& src, const MesTransceiverId& dest,
@ -97,6 +117,25 @@ private:
MessageProcessor mProcessor;
bool mIsProcessing = false;
};
enum class Flag {
Initialized = 1 << 0,
};
struct Logger : MessageProcessor::Logger {
~Logger() override;
void log(const Message& message, bool success) override;
};
sead::Thread* mProcessingThread{};
Logger mLogger{};
Queues* mQueues{};
sead::TypedBitFlag<Flag> mFlags;
sead::Buffer<bool> mBoolBuffer;
sead::ObjList<bool*> mBools;
sead::CriticalSection mCritSection;
util::Event mUpdateEndEvent;
int mNumEntries = 0;
};
} // namespace ksys