ksys: Add more message system classes

This commit is contained in:
Léo Lam 2021-01-30 12:53:53 +01:00
parent bd150241cf
commit de0480c330
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
14 changed files with 289 additions and 95 deletions

View File

@ -48872,7 +48872,7 @@
0x00000071007b6e1c,sub_71007B6E1C,92,
0x00000071007b6e78,sub_71007B6E78,160,
0x00000071007b6f18,sub_71007B6F18,24,
0x00000071007b6f30,sub_71007B6F30,12,
0x00000071007b6f30,sub_71007B6F30,12,_ZN4ksys19MesTransceiverIdGen9setField0ERKj
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,
0x00000071010bfd78,Struct1A::dtor,28,
0x00000071010bfd94,j__ZdlPv_1195,4,
0x00000071010bfd98,Struct1C::getId,8,
0x00000071010bfda0,sub_71010BFDA0,8,
0x00000071010bfda8,nullsub_4504,4,
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
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,
0x00000071010c003c,j_Struct1A::dtor,4,
0x00000071010c0040,sub_71010C0040,36,
0x00000071010c0064,sub_71010C0064,12,
0x00000071010c0070,sub_71010C0070,60,
0x00000071010c00ac,sub_71010C00AC,32,
0x00000071010c00cc,sub_71010C00CC,16,
0x00000071010c00dc,sub_71010C00DC,48,
0x00000071010c010c,sub_71010C010C,8,
0x00000071010c0114,nullsub_4510,4,
0x00000071010c0118,Struct1C::x,16,
0x00000071010c0128,sub_71010C0128,16,
0x00000071010c0138,sub_71010C0138,112,
0x00000071010c01a8,sub_71010C01A8,92,
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
0x00000071010c0204,sub_71010C0204,104,
0x00000071010c026c,Struct1C::ctor,56,
0x00000071010c02a4,Struct1C::dtor,4,
0x00000071010c02a8,sub_71010C02A8,36,
0x00000071010c02cc,sub_71010C02CC,16,
0x00000071010c02dc,sub_71010C02DC,16,
0x00000071010c02ec,sub_71010C02EC,204,
0x00000071010c03b8,sub_71010C03B8,92,
0x00000071010c0414,sub_71010C0414,140,
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
0x00000071010c04a0,j_j_Struct1A::dtor,4,
0x00000071010c04a4,sub_71010C04A4,36,
0x00000071010c04c8,sub_71010C04C8,16,
@ -92681,17 +92681,17 @@
0x00000071011f6474,sub_71011F6474,8,
0x00000071011f647c,sub_71011F647C,204,
0x00000071011f6548,sub_71011F6548,92,
0x00000071011f65a4,getGlobalMessagePtr,36,_ZN4ksys18MessageTransceiverC1Ev
0x00000071011f65c8,nullsub_4673,4,_ZN4ksys18MessageTransceiverD1Ev
0x00000071011f65cc,j__ZdlPv_1225,4,_ZN4ksys18MessageTransceiverD0Ev
0x00000071011f65d0,sub_71011F65D0,28,
0x00000071011f65ec,sub_71011F65EC,28,
0x00000071011f6608,sub_71011F6608,8,_ZN4ksys18MessageTransceiver2m2Ev
0x00000071011f6610,sub_71011F6610,8,_ZN4ksys18MessageTransceiver2m3Ev
0x00000071011f6618,sub_71011F6618,8,_ZN4ksys18MessageTransceiver2m4Ev
0x00000071011f6620,sub_71011F6620,8,_ZN4ksys18MessageTransceiver2m5Ev
0x00000071011f6628,getGlobalMessage,8,_ZN4ksys18MessageTransceiver13getDispatcherEv
0x00000071011f6630,GlobalMessage::setGlobalPtr_,16,_ZN4ksys18MessageTransceiver19setGlobalDispatcherEPNS_21MessageDispatcherBaseE
0x00000071011f65a4,getGlobalMessagePtr,36,_ZN4ksys22MessageTransceiverBaseC1Ev
0x00000071011f65c8,nullsub_4673,4,_ZN4ksys22MessageTransceiverBaseD1Ev
0x00000071011f65cc,j__ZdlPv_1225,4,_ZN4ksys22MessageTransceiverBaseD0Ev
0x00000071011f65d0,sub_71011F65D0,28,_ZNK4ksys22MessageTransceiverBase18checkGeneratorFlagEv
0x00000071011f65ec,sub_71011F65EC,28,_ZNK4ksys22MessageTransceiverBase21checkGeneratorCounterEv
0x00000071011f6608,sub_71011F6608,8,_ZN4ksys22MessageTransceiverBase2m2Ev
0x00000071011f6610,sub_71011F6610,8,_ZN4ksys22MessageTransceiverBase2m3Ev
0x00000071011f6618,sub_71011F6618,8,_ZN4ksys22MessageTransceiverBase2m4Ev
0x00000071011f6620,sub_71011F6620,8,_ZN4ksys22MessageTransceiverBase2m5Ev
0x00000071011f6628,getGlobalMessage,8,_ZN4ksys22MessageTransceiverBase13getDispatcherEv
0x00000071011f6630,GlobalMessage::setGlobalPtr_,16,_ZN4ksys22MessageTransceiverBase19setGlobalDispatcherEPNS_21MessageDispatcherBaseE
0x00000071011f6640,sub_71011F6640,16,
0x00000071011f6650,j_j_Struct1A::dtor_1,4,
0x00000071011f6654,sub_71011F6654,36,

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

@ -1 +1 @@
Subproject commit 785bd9cbc723960f10757bcf03a338f80812d1d9
Subproject commit 9ce3831edcb432942600283f33ebc93c0b810d29

View File

@ -9,10 +9,16 @@ target_sources(uking PRIVATE
Thread/ManagedTaskHandle.h
Thread/MessageDispatcherBase.cpp
Thread/MessageDispatcherBase.h
Thread/MessageTransceiver.cpp
Thread/MessageTransceiver.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

View File

@ -1,5 +1,5 @@
#include "KingSystem/Utils/Thread/MessageDispatcherBase.h"
#include "KingSystem/Utils/Thread/MessageTransceiver.h"
#include "KingSystem/Utils/Thread/MessageTransceiverBase.h"
namespace ksys {
@ -8,7 +8,7 @@ MessageDispatcherBase::MessageDispatcherBase() = default;
MessageDispatcherBase::~MessageDispatcherBase() = default;
void MessageDispatcherBase::setAsGlobalInstance() {
MessageTransceiver::setGlobalDispatcher(this);
MessageTransceiverBase::setGlobalDispatcher(this);
}
} // namespace ksys

View File

@ -1,33 +0,0 @@
#include "KingSystem/Utils/Thread/MessageTransceiver.h"
namespace ksys {
MessageTransceiver::MessageTransceiver() = default;
MessageTransceiver::~MessageTransceiver() = default;
bool MessageTransceiver::m2() {
return false;
}
bool MessageTransceiver::m3() {
return false;
}
bool MessageTransceiver::m4() {
return false;
}
bool MessageTransceiver::m5() {
return false;
}
MessageDispatcherBase* MessageTransceiver::getDispatcher() {
return mDispatcher;
}
void MessageTransceiver::setGlobalDispatcher(MessageDispatcherBase* dispatcher) {
sDispatcher = dispatcher;
}
} // namespace ksys

View File

@ -0,0 +1,44 @@
#include "KingSystem/Utils/Thread/MessageTransceiverBase.h"
#include "KingSystem/Utils/Thread/MessageTransceiverIdGenEx.h"
namespace ksys {
MessageDispatcherBase* MessageTransceiverBase::sDispatcher{};
MessageTransceiverBase::MessageTransceiverBase() = default;
MessageTransceiverBase::~MessageTransceiverBase() = default;
bool MessageTransceiverBase::checkGeneratorFlag() const {
return getGenerator()->checkFlag();
}
bool MessageTransceiverBase::checkGeneratorCounter() const {
return getGenerator()->checkCounter();
}
bool MessageTransceiverBase::m2() {
return false;
}
bool MessageTransceiverBase::m3() {
return false;
}
bool MessageTransceiverBase::m4() {
return false;
}
bool MessageTransceiverBase::m5() {
return false;
}
MessageDispatcherBase* MessageTransceiverBase::getDispatcher() {
return mDispatcher;
}
void MessageTransceiverBase::setGlobalDispatcher(MessageDispatcherBase* dispatcher) {
sDispatcher = dispatcher;
}
} // namespace ksys

View File

@ -6,18 +6,19 @@ namespace ksys {
class MessageDispatcherBase;
struct MesTransceiverId;
class MesTransceiverIdGenEx;
class MessageTransceiver {
class MessageTransceiverBase {
public:
MessageTransceiver();
virtual ~MessageTransceiver();
bool checkX();
bool checkY();
MessageTransceiverBase();
virtual ~MessageTransceiverBase();
bool checkGeneratorFlag() const;
bool checkGeneratorCounter() const;
virtual bool m2();
virtual bool m3();
virtual bool m4();
virtual bool m5();
virtual void* getSomePtr() = 0;
virtual MesTransceiverIdGenEx* getGenerator() const = 0;
MessageDispatcherBase* getDispatcher();
static void setGlobalDispatcher(MessageDispatcherBase* dispatcher);

View File

@ -6,29 +6,34 @@
namespace ksys {
class MesTransceiverIdGen;
struct MesTransceiverId {
MesTransceiverId() { reset(); }
MesTransceiverId(u32& id, MesTransceiverIdGen* generator)
: _0(0xffffffff), id(++id), generator(generator) {}
~MesTransceiverId() { reset(); }
void reset() {
_0 = -1;
_4 = -1;
_8 = nullptr;
_10 = nullptr;
_0 = 0xffffffff;
id = 0xffffffff;
generator = nullptr;
next = nullptr;
}
MesTransceiverId& operator=(const MesTransceiverId& other) {
_0 = other._0;
_4 = other._4;
_8 = other._8;
_10 = other._10;
id = other.id;
generator = other.generator;
next = other.next;
return *this;
}
s32 _0{};
s32 _4{};
void* _8{};
void* _10{};
u32 _0{};
u32 id{};
MesTransceiverIdGen* generator{};
MesTransceiverId** next{};
};
KSYS_CHECK_SIZE_NX150(MesTransceiverId, 0x18);

View File

@ -0,0 +1,21 @@
#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

View File

@ -0,0 +1,24 @@
#pragma once
#include <basis/seadTypes.h>
#include "KingSystem/Utils/Thread/MessageTransceiverId.h"
namespace ksys {
class MesTransceiverIdGen {
public:
MesTransceiverIdGen();
virtual ~MesTransceiverIdGen();
virtual MesTransceiverId* getId();
virtual bool m1(void*);
virtual void m2(void* x);
virtual void setField0(const u32& value) { mTransceiverId._0 = value; }
protected:
MesTransceiverId mTransceiverId;
private:
static u32 sId;
};
} // namespace ksys

View File

@ -0,0 +1,53 @@
#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<void>(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

View File

@ -0,0 +1,34 @@
#pragma once
#include <prim/seadRuntimeTypeInfo.h>
#include <thread/seadAtomic.h>
#include "KingSystem/Utils/Thread/MessageTransceiverIdGen.h"
namespace ksys {
class MesTransceiverIdGenEx : public MesTransceiverIdGen {
public:
MesTransceiverIdGenEx();
~MesTransceiverIdGenEx() override;
bool m1(void*) override;
void m2(void* x) override;
bool checkFlag() const;
bool checkCounter() const;
void setFlag(bool update_counter);
void setFlagPointer(u8* ptr);
void clearFlagPointer();
SEAD_RTTI_BASE(MesTransceiverIdGenEx)
protected:
virtual bool m6(void* x);
virtual void m7(void* x);
private:
u8* mFlag{};
sead::Atomic<s32> mCounter;
};
} // namespace ksys

View File

@ -0,0 +1,18 @@
#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

View File

@ -0,0 +1,21 @@
#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