diff --git a/data/uking_functions.csv b/data/uking_functions.csv index b8476131..794a7b43 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -48872,7 +48872,7 @@ 0x00000071007b6e1c,sub_71007B6E1C,92, 0x00000071007b6e78,sub_71007B6E78,160, 0x00000071007b6f18,sub_71007B6F18,24, -0x00000071007b6f30,sub_71007B6F30,12,_ZN4ksys19MesTransceiverIdGen9setField0ERKj +0x00000071007b6f30,sub_71007B6F30,12,_ZN4ksys15MessageReceiver9setField0ERKj 0x00000071007b6f3c,sub_71007B6F3C,88, 0x00000071007b6f94,StateMachineWrapper::dtor,80, 0x00000071007b6fe4,StateMachineWrapper::dtorDelete,88, @@ -88848,12 +88848,12 @@ 0x00000071010bfd08,sub_71010BFD08,8, 0x00000071010bfd10,sub_71010BFD10,36, 0x00000071010bfd34,sub_71010BFD34,12, -0x00000071010bfd40,Struct1A::ctor,56,_ZN4ksys19MesTransceiverIdGenC1Ev -0x00000071010bfd78,Struct1A::dtor,28,_ZN4ksys19MesTransceiverIdGenD1Ev -0x00000071010bfd94,j__ZdlPv_1195,4,_ZN4ksys19MesTransceiverIdGenD0Ev -0x00000071010bfd98,Struct1C::getId,8,_ZN4ksys19MesTransceiverIdGen5getIdEv -0x00000071010bfda0,sub_71010BFDA0,8,_ZN4ksys19MesTransceiverIdGen2m1EPv -0x00000071010bfda8,nullsub_4504,4,_ZN4ksys19MesTransceiverIdGen2m2EPv +0x00000071010bfd40,Struct1A::ctor,56,_ZN4ksys15MessageReceiverC1Ev +0x00000071010bfd78,Struct1A::dtor,28,_ZN4ksys15MessageReceiverD1Ev +0x00000071010bfd94,j__ZdlPv_1195,4,_ZN4ksys15MessageReceiverD0Ev +0x00000071010bfd98,Struct1C::getId,8,_ZN4ksys15MessageReceiver5getIdEv +0x00000071010bfda0,sub_71010BFDA0,8,_ZN4ksys15MessageReceiver2m1EPv +0x00000071010bfda8,nullsub_4504,4,_ZN4ksys15MessageReceiver2m2EPv 0x00000071010bfdac,StateMachine::ctor,44, 0x00000071010bfdd8,StateMachine::getState,64, 0x00000071010bfe18,StateMachine::run,76, @@ -88872,29 +88872,29 @@ 0x00000071010bff78,sub_71010BFF78,52, 0x00000071010bffac,sub_71010BFFAC,52, 0x00000071010bffe0,sub_71010BFFE0,36, -0x00000071010c0004,Struct1B::ctor,56,_ZN4ksys21MesTransceiverIdGenExC1Ev -0x00000071010c003c,j_Struct1A::dtor,4,_ZN4ksys21MesTransceiverIdGenExD1Ev -0x00000071010c0040,sub_71010C0040,36,_ZN4ksys21MesTransceiverIdGenExD0Ev -0x00000071010c0064,sub_71010C0064,12,_ZN4ksys21MesTransceiverIdGenEx2m1EPv -0x00000071010c0070,sub_71010C0070,60,_ZN4ksys21MesTransceiverIdGenEx2m2EPv -0x00000071010c00ac,sub_71010C00AC,32,_ZNK4ksys21MesTransceiverIdGenEx9checkFlagEv -0x00000071010c00cc,sub_71010C00CC,16,_ZNK4ksys21MesTransceiverIdGenEx12checkCounterEv -0x00000071010c00dc,sub_71010C00DC,48,_ZN4ksys21MesTransceiverIdGenEx7setFlagEb -0x00000071010c010c,sub_71010C010C,8,_ZN4ksys21MesTransceiverIdGenEx2m6EPv -0x00000071010c0114,nullsub_4510,4,_ZN4ksys21MesTransceiverIdGenEx2m7EPv -0x00000071010c0118,Struct1C::x,16,_ZN4ksys21MesTransceiverIdGenEx14setFlagPointerEPh -0x00000071010c0128,sub_71010C0128,16,_ZN4ksys21MesTransceiverIdGenEx16clearFlagPointerEv -0x00000071010c0138,sub_71010C0138,112,_ZNK4ksys21MesTransceiverIdGenEx27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE -0x00000071010c01a8,sub_71010C01A8,92,_ZNK4ksys21MesTransceiverIdGenEx18getRuntimeTypeInfoEv +0x00000071010c0004,Struct1B::ctor,56,_ZN4ksys17MessageReceiverExC1Ev +0x00000071010c003c,j_Struct1A::dtor,4,_ZN4ksys17MessageReceiverExD1Ev +0x00000071010c0040,sub_71010C0040,36,_ZN4ksys17MessageReceiverExD0Ev +0x00000071010c0064,sub_71010C0064,12,_ZN4ksys17MessageReceiverEx2m1EPv +0x00000071010c0070,sub_71010C0070,60,_ZN4ksys17MessageReceiverEx2m2EPv +0x00000071010c00ac,sub_71010C00AC,32,_ZNK4ksys17MessageReceiverEx9checkFlagEv +0x00000071010c00cc,sub_71010C00CC,16,_ZNK4ksys17MessageReceiverEx12checkCounterEv +0x00000071010c00dc,sub_71010C00DC,48,_ZN4ksys17MessageReceiverEx7setFlagEb +0x00000071010c010c,sub_71010C010C,8,_ZN4ksys17MessageReceiverEx2m6EPv +0x00000071010c0114,nullsub_4510,4,_ZN4ksys17MessageReceiverEx2m7EPv +0x00000071010c0118,Struct1C::x,16,_ZN4ksys17MessageReceiverEx14setFlagPointerEPh +0x00000071010c0128,sub_71010C0128,16,_ZN4ksys17MessageReceiverEx16clearFlagPointerEv +0x00000071010c0138,sub_71010C0138,112,_ZNK4ksys17MessageReceiverEx27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE +0x00000071010c01a8,sub_71010C01A8,92,_ZNK4ksys17MessageReceiverEx18getRuntimeTypeInfoEv 0x00000071010c0204,sub_71010C0204,104, -0x00000071010c026c,Struct1C::ctor,56,_ZN4ksys28MesTransceiverIdGenExAdapterC1EPNS_19MesTransceiverIdGenE -0x00000071010c02a4,Struct1C::dtor,4,_ZN4ksys28MesTransceiverIdGenExAdapterD1Ev -0x00000071010c02a8,sub_71010C02A8,36,_ZN4ksys28MesTransceiverIdGenExAdapterD0Ev -0x00000071010c02cc,sub_71010C02CC,16,_ZN4ksys28MesTransceiverIdGenExAdapter2m6EPv -0x00000071010c02dc,sub_71010C02DC,16,_ZN4ksys28MesTransceiverIdGenExAdapter2m7EPv -0x00000071010c02ec,sub_71010C02EC,204,_ZNK4ksys28MesTransceiverIdGenExAdapter27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE -0x00000071010c03b8,sub_71010C03B8,92,_ZNK4ksys28MesTransceiverIdGenExAdapter18getRuntimeTypeInfoEv -0x00000071010c0414,sub_71010C0414,140,_ZNK4sead15RuntimeTypeInfo6DeriveIN4ksys21MesTransceiverIdGenExEE9isDerivedEPKNS0_9InterfaceE +0x00000071010c026c,Struct1C::ctor,56,_ZN4ksys22MessageReceiverAdapterC1EPNS_15MessageReceiverE +0x00000071010c02a4,Struct1C::dtor,4,_ZN4ksys22MessageReceiverAdapterD1Ev +0x00000071010c02a8,sub_71010C02A8,36,_ZN4ksys22MessageReceiverAdapterD0Ev +0x00000071010c02cc,sub_71010C02CC,16,_ZN4ksys22MessageReceiverAdapter2m6EPv +0x00000071010c02dc,sub_71010C02DC,16,_ZN4ksys22MessageReceiverAdapter2m7EPv +0x00000071010c02ec,sub_71010C02EC,204,_ZNK4ksys22MessageReceiverAdapter27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE +0x00000071010c03b8,sub_71010C03B8,92,_ZNK4ksys22MessageReceiverAdapter18getRuntimeTypeInfoEv +0x00000071010c0414,sub_71010C0414,140,_ZNK4sead15RuntimeTypeInfo6DeriveIN4ksys17MessageReceiverExEE9isDerivedEPKNS0_9InterfaceE 0x00000071010c04a0,j_j_Struct1A::dtor,4, 0x00000071010c04a4,sub_71010C04A4,36, 0x00000071010c04c8,sub_71010C04C8,16, diff --git a/src/KingSystem/Utils/CMakeLists.txt b/src/KingSystem/Utils/CMakeLists.txt index be2d117a..48f737e5 100644 --- a/src/KingSystem/Utils/CMakeLists.txt +++ b/src/KingSystem/Utils/CMakeLists.txt @@ -9,16 +9,16 @@ target_sources(uking PRIVATE Thread/ManagedTaskHandle.h Thread/MessageDispatcherBase.cpp Thread/MessageDispatcherBase.h + Thread/MessageReceiver.cpp + Thread/MessageReceiver.h + Thread/MessageReceiverAdapter.cpp + Thread/MessageReceiverAdapter.h + Thread/MessageReceiverEx.cpp + Thread/MessageReceiverEx.h Thread/MessageTransceiverBase.cpp Thread/MessageTransceiverBase.h Thread/MessageTransceiverId.cpp Thread/MessageTransceiverId.h - Thread/MessageTransceiverIdGen.cpp - Thread/MessageTransceiverIdGen.h - Thread/MessageTransceiverIdGenEx.cpp - Thread/MessageTransceiverIdGenEx.h - Thread/MessageTransceiverIdGenExAdapter.cpp - Thread/MessageTransceiverIdGenExAdapter.h Thread/Task.cpp Thread/Task.h Thread/TaskData.h diff --git a/src/KingSystem/Utils/Thread/MessageReceiver.cpp b/src/KingSystem/Utils/Thread/MessageReceiver.cpp new file mode 100644 index 00000000..e4b96762 --- /dev/null +++ b/src/KingSystem/Utils/Thread/MessageReceiver.cpp @@ -0,0 +1,21 @@ +#include "KingSystem/Utils/Thread/MessageReceiver.h" + +namespace ksys { + +u32 MessageReceiver::sId{}; + +MessageReceiver::MessageReceiver() : mTransceiverId(sId, this) {} + +MessageReceiver::~MessageReceiver() = default; + +MesTransceiverId* MessageReceiver::getId() { + return &mTransceiverId; +} + +bool MessageReceiver::m1(void*) { + return true; +} + +void MessageReceiver::m2(void* x) {} + +} // namespace ksys diff --git a/src/KingSystem/Utils/Thread/MessageTransceiverIdGen.h b/src/KingSystem/Utils/Thread/MessageReceiver.h similarity index 66% rename from src/KingSystem/Utils/Thread/MessageTransceiverIdGen.h rename to src/KingSystem/Utils/Thread/MessageReceiver.h index 51d365fe..4b92e4fe 100644 --- a/src/KingSystem/Utils/Thread/MessageTransceiverIdGen.h +++ b/src/KingSystem/Utils/Thread/MessageReceiver.h @@ -5,14 +5,14 @@ namespace ksys { -class MesTransceiverIdGen { +class MessageReceiver { public: - MesTransceiverIdGen(); - virtual ~MesTransceiverIdGen(); + MessageReceiver(); + virtual ~MessageReceiver(); virtual MesTransceiverId* getId(); virtual bool m1(void*); virtual void m2(void* x); - virtual void setField0(const u32& value) { mTransceiverId._0 = value; } + virtual void setField0(const u32& value) { mTransceiverId.queue_id = value; } protected: MesTransceiverId mTransceiverId; diff --git a/src/KingSystem/Utils/Thread/MessageReceiverAdapter.cpp b/src/KingSystem/Utils/Thread/MessageReceiverAdapter.cpp new file mode 100644 index 00000000..a982def4 --- /dev/null +++ b/src/KingSystem/Utils/Thread/MessageReceiverAdapter.cpp @@ -0,0 +1,18 @@ +#include "KingSystem/Utils/Thread/MessageReceiverAdapter.h" + +namespace ksys { + +MessageReceiverAdapter::MessageReceiverAdapter(MessageReceiver* wrapped) + : mReceiver(wrapped) {} + +MessageReceiverAdapter::~MessageReceiverAdapter() = default; + +bool MessageReceiverAdapter::m6(void* x) { + return mReceiver->m1(x); +} + +void MessageReceiverAdapter::m7(void* x) { + return mReceiver->m2(x); +} + +} // namespace ksys diff --git a/src/KingSystem/Utils/Thread/MessageReceiverAdapter.h b/src/KingSystem/Utils/Thread/MessageReceiverAdapter.h new file mode 100644 index 00000000..41b803b2 --- /dev/null +++ b/src/KingSystem/Utils/Thread/MessageReceiverAdapter.h @@ -0,0 +1,21 @@ +#pragma once + +#include "KingSystem/Utils/Thread/MessageReceiverEx.h" + +namespace ksys { + +class MessageReceiverAdapter : public MessageReceiverEx { + SEAD_RTTI_OVERRIDE(MessageReceiverAdapter, MessageReceiverEx) +public: + explicit MessageReceiverAdapter(MessageReceiver* wrapped); + ~MessageReceiverAdapter() override; + +protected: + bool m6(void* x) override; + void m7(void* x) override; + +private: + MessageReceiver* mReceiver; +}; + +} // namespace ksys diff --git a/src/KingSystem/Utils/Thread/MessageReceiverEx.cpp b/src/KingSystem/Utils/Thread/MessageReceiverEx.cpp new file mode 100644 index 00000000..06006cea --- /dev/null +++ b/src/KingSystem/Utils/Thread/MessageReceiverEx.cpp @@ -0,0 +1,53 @@ +#include "KingSystem/Utils/Thread/MessageReceiverEx.h" + +namespace ksys { + +MessageReceiverEx::MessageReceiverEx() = default; + +MessageReceiverEx::~MessageReceiverEx() = default; + +bool MessageReceiverEx::m1(void* x) { + return m6(x); +} + +void MessageReceiverEx::m2(void* x) { + m7(x); + --mCounter; + static_cast(mCounter.load()); +} + +bool MessageReceiverEx::checkFlag() const { + return mFlag && *mFlag == 1; +} + +bool MessageReceiverEx::checkCounter() const { + return mCounter > 0; +} + +void MessageReceiverEx::setFlag(bool update_counter) { + if (mFlag) { + if (update_counter) + mCounter.increment(); + *mFlag = 1; + } +} + +bool MessageReceiverEx::m6(void* x) { + return true; +} + +void MessageReceiverEx::m7(void* x) {} + +void MessageReceiverEx::setFlagPointer(u8* ptr) { + if (ptr) { + mFlag = ptr; + *mFlag = 0; + } +} + +void MessageReceiverEx::clearFlagPointer() { + *mFlag = 0; + mFlag = nullptr; +} + +} // namespace ksys diff --git a/src/KingSystem/Utils/Thread/MessageTransceiverIdGenEx.h b/src/KingSystem/Utils/Thread/MessageReceiverEx.h similarity index 68% rename from src/KingSystem/Utils/Thread/MessageTransceiverIdGenEx.h rename to src/KingSystem/Utils/Thread/MessageReceiverEx.h index e03fb53e..48470314 100644 --- a/src/KingSystem/Utils/Thread/MessageTransceiverIdGenEx.h +++ b/src/KingSystem/Utils/Thread/MessageReceiverEx.h @@ -2,14 +2,14 @@ #include #include -#include "KingSystem/Utils/Thread/MessageTransceiverIdGen.h" +#include "KingSystem/Utils/Thread/MessageReceiver.h" namespace ksys { -class MesTransceiverIdGenEx : public MesTransceiverIdGen { +class MessageReceiverEx : public MessageReceiver { public: - MesTransceiverIdGenEx(); - ~MesTransceiverIdGenEx() override; + MessageReceiverEx(); + ~MessageReceiverEx() override; bool m1(void*) override; void m2(void* x) override; @@ -20,7 +20,7 @@ public: void setFlagPointer(u8* ptr); void clearFlagPointer(); - SEAD_RTTI_BASE(MesTransceiverIdGenEx) + SEAD_RTTI_BASE(MessageReceiverEx) protected: virtual bool m6(void* x); diff --git a/src/KingSystem/Utils/Thread/MessageTransceiverBase.cpp b/src/KingSystem/Utils/Thread/MessageTransceiverBase.cpp index f7bb2486..32b15361 100644 --- a/src/KingSystem/Utils/Thread/MessageTransceiverBase.cpp +++ b/src/KingSystem/Utils/Thread/MessageTransceiverBase.cpp @@ -1,5 +1,5 @@ #include "KingSystem/Utils/Thread/MessageTransceiverBase.h" -#include "KingSystem/Utils/Thread/MessageTransceiverIdGenEx.h" +#include "KingSystem/Utils/Thread/MessageReceiverEx.h" namespace ksys { diff --git a/src/KingSystem/Utils/Thread/MessageTransceiverBase.h b/src/KingSystem/Utils/Thread/MessageTransceiverBase.h index e74ca070..e021e132 100644 --- a/src/KingSystem/Utils/Thread/MessageTransceiverBase.h +++ b/src/KingSystem/Utils/Thread/MessageTransceiverBase.h @@ -6,7 +6,7 @@ namespace ksys { class MessageDispatcherBase; struct MesTransceiverId; -class MesTransceiverIdGenEx; +class MessageReceiverEx; class MessageTransceiverBase { public: @@ -18,7 +18,7 @@ public: virtual bool m3(); virtual bool m4(); virtual bool m5(); - virtual MesTransceiverIdGenEx* getGenerator() const = 0; + virtual MessageReceiverEx* getGenerator() const = 0; MessageDispatcherBase* getDispatcher(); static void setGlobalDispatcher(MessageDispatcherBase* dispatcher); diff --git a/src/KingSystem/Utils/Thread/MessageTransceiverId.h b/src/KingSystem/Utils/Thread/MessageTransceiverId.h index 71b97d13..84e19d39 100644 --- a/src/KingSystem/Utils/Thread/MessageTransceiverId.h +++ b/src/KingSystem/Utils/Thread/MessageTransceiverId.h @@ -6,33 +6,31 @@ namespace ksys { -class MesTransceiverIdGen; +class MessageReceiver; struct MesTransceiverId { MesTransceiverId() { reset(); } - MesTransceiverId(u32& id, MesTransceiverIdGen* generator) - : _0(0xffffffff), id(++id), generator(generator) {} - + MesTransceiverId(u32& id, MessageReceiver* receiver) : id(++id), receiver(receiver) {} ~MesTransceiverId() { reset(); } void reset() { - _0 = 0xffffffff; + queue_id = 0xffffffff; id = 0xffffffff; - generator = nullptr; + receiver = nullptr; next = nullptr; } MesTransceiverId& operator=(const MesTransceiverId& other) { - _0 = other._0; + queue_id = other.queue_id; id = other.id; - generator = other.generator; + receiver = other.receiver; next = other.next; return *this; } - u32 _0{}; - u32 id{}; - MesTransceiverIdGen* generator{}; + u32 queue_id = 0xffffffff; + u32 id = 0xffffffff; + MessageReceiver* receiver{}; MesTransceiverId** next{}; }; KSYS_CHECK_SIZE_NX150(MesTransceiverId, 0x18); diff --git a/src/KingSystem/Utils/Thread/MessageTransceiverIdGen.cpp b/src/KingSystem/Utils/Thread/MessageTransceiverIdGen.cpp deleted file mode 100644 index fa1362fc..00000000 --- a/src/KingSystem/Utils/Thread/MessageTransceiverIdGen.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include "KingSystem/Utils/Thread/MessageTransceiverIdGen.h" - -namespace ksys { - -u32 MesTransceiverIdGen::sId{}; - -MesTransceiverIdGen::MesTransceiverIdGen() : mTransceiverId(sId, this) {} - -MesTransceiverIdGen::~MesTransceiverIdGen() = default; - -MesTransceiverId* MesTransceiverIdGen::getId() { - return &mTransceiverId; -} - -bool MesTransceiverIdGen::m1(void*) { - return true; -} - -void MesTransceiverIdGen::m2(void* x) {} - -} // namespace ksys diff --git a/src/KingSystem/Utils/Thread/MessageTransceiverIdGenEx.cpp b/src/KingSystem/Utils/Thread/MessageTransceiverIdGenEx.cpp deleted file mode 100644 index 0f4f87b0..00000000 --- a/src/KingSystem/Utils/Thread/MessageTransceiverIdGenEx.cpp +++ /dev/null @@ -1,53 +0,0 @@ -#include "KingSystem/Utils/Thread/MessageTransceiverIdGenEx.h" - -namespace ksys { - -MesTransceiverIdGenEx::MesTransceiverIdGenEx() = default; - -MesTransceiverIdGenEx::~MesTransceiverIdGenEx() = default; - -bool MesTransceiverIdGenEx::m1(void* x) { - return m6(x); -} - -void MesTransceiverIdGenEx::m2(void* x) { - m7(x); - --mCounter; - static_cast(mCounter.load()); -} - -bool MesTransceiverIdGenEx::checkFlag() const { - return mFlag && *mFlag == 1; -} - -bool MesTransceiverIdGenEx::checkCounter() const { - return mCounter > 0; -} - -void MesTransceiverIdGenEx::setFlag(bool update_counter) { - if (mFlag) { - if (update_counter) - mCounter.increment(); - *mFlag = 1; - } -} - -bool MesTransceiverIdGenEx::m6(void* x) { - return true; -} - -void MesTransceiverIdGenEx::m7(void* x) {} - -void MesTransceiverIdGenEx::setFlagPointer(u8* ptr) { - if (ptr) { - mFlag = ptr; - *mFlag = 0; - } -} - -void MesTransceiverIdGenEx::clearFlagPointer() { - *mFlag = 0; - mFlag = nullptr; -} - -} // namespace ksys diff --git a/src/KingSystem/Utils/Thread/MessageTransceiverIdGenExAdapter.cpp b/src/KingSystem/Utils/Thread/MessageTransceiverIdGenExAdapter.cpp deleted file mode 100644 index c674581e..00000000 --- a/src/KingSystem/Utils/Thread/MessageTransceiverIdGenExAdapter.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#include "KingSystem/Utils/Thread/MessageTransceiverIdGenExAdapter.h" - -namespace ksys { - -MesTransceiverIdGenExAdapter::MesTransceiverIdGenExAdapter(MesTransceiverIdGen* wrapped) - : mGenerator(wrapped) {} - -MesTransceiverIdGenExAdapter::~MesTransceiverIdGenExAdapter() = default; - -bool MesTransceiverIdGenExAdapter::m6(void* x) { - return mGenerator->m1(x); -} - -void MesTransceiverIdGenExAdapter::m7(void* x) { - return mGenerator->m2(x); -} - -} // namespace ksys diff --git a/src/KingSystem/Utils/Thread/MessageTransceiverIdGenExAdapter.h b/src/KingSystem/Utils/Thread/MessageTransceiverIdGenExAdapter.h deleted file mode 100644 index 1353572c..00000000 --- a/src/KingSystem/Utils/Thread/MessageTransceiverIdGenExAdapter.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#include "KingSystem/Utils/Thread/MessageTransceiverIdGenEx.h" - -namespace ksys { - -class MesTransceiverIdGenExAdapter : public MesTransceiverIdGenEx { - SEAD_RTTI_OVERRIDE(MesTransceiverIdGenExAdapter, MesTransceiverIdGenEx) -public: - explicit MesTransceiverIdGenExAdapter(MesTransceiverIdGen* wrapped); - ~MesTransceiverIdGenExAdapter() override; - -protected: - bool m6(void* x) override; - void m7(void* x) override; - -private: - MesTransceiverIdGen* mGenerator; -}; - -} // namespace ksys