diff --git a/data/uking_functions.csv b/data/uking_functions.csv index e3cb50d6..33bde4f2 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -88843,11 +88843,11 @@ 0x00000071010bfcbc,sub_71010BFCBC,8,_ZNK4ksys7Message14getDestinationEv 0x00000071010bfcc4,sub_71010BFCC4,8,_ZNK4ksys7Message7getTypeEv 0x00000071010bfccc,sub_71010BFCCC,8,_ZNK4ksys7Message11getUserDataEv -0x00000071010bfcd4,sub_71010BFCD4,8,_ZNK4ksys7Message10getField48Ev +0x00000071010bfcd4,sub_71010BFCD4,8,_ZNK4ksys7Message11getBrokerIdEv 0x00000071010bfcdc,sub_71010BFCDC,44,_ZNK4ksys7Message17shouldBeProcessedEv 0x00000071010bfd08,sub_71010BFD08,8,_ZNK4ksys7Message9shouldAckEv 0x00000071010bfd10,sub_71010BFD10,36,_ZN4ksys7Message14setDestinationERKNS_16MesTransceiverIdE -0x00000071010bfd34,sub_71010BFD34,12,_ZN4ksys7Message10setField48ERKj +0x00000071010bfd34,sub_71010BFD34,12,_ZN4ksys7Message11setBrokerIdERKj 0x00000071010bfd40,Struct1A::ctor,56,_ZN4ksys15MessageReceiverC1Ev 0x00000071010bfd78,Struct1A::dtor,28,_ZN4ksys15MessageReceiverD1Ev 0x00000071010bfd94,j__ZdlPv_1195,4,_ZN4ksys15MessageReceiverD0Ev @@ -88878,7 +88878,7 @@ 0x00000071010c0064,sub_71010C0064,12,_ZN4ksys17MessageReceiverEx7receiveERKNS_7MessageE 0x00000071010c0070,sub_71010C0070,60,_ZN4ksys17MessageReceiverEx7receiveERKNS_10MessageAckE 0x00000071010c00ac,sub_71010C00AC,32,_ZNK4ksys17MessageReceiverEx9checkFlagEv -0x00000071010c00cc,sub_71010C00CC,16,_ZNK4ksys17MessageReceiverEx12checkCounterEv +0x00000071010c00cc,sub_71010C00CC,16,_ZNK4ksys17MessageReceiverEx15isWaitingForAckEv 0x00000071010c00dc,sub_71010C00DC,48,_ZN4ksys17MessageReceiverEx7setFlagEb 0x00000071010c010c,sub_71010C010C,8,_ZN4ksys17MessageReceiverEx13handleMessageERKNS_7MessageE 0x00000071010c0114,nullsub_4510,4,_ZN4ksys17MessageReceiverEx9handleAckERKNS_10MessageAckE @@ -92685,11 +92685,11 @@ 0x00000071011f65c8,nullsub_4673,4,_ZN4ksys22MessageTransceiverBaseD1Ev 0x00000071011f65cc,j__ZdlPv_1225,4,_ZN4ksys22MessageTransceiverBaseD0Ev 0x00000071011f65d0,sub_71011F65D0,28,_ZNK4ksys22MessageTransceiverBase17checkReceiverFlagEv -0x00000071011f65ec,sub_71011F65EC,28,_ZNK4ksys22MessageTransceiverBase20checkReceiverCounterEv -0x00000071011f6608,sub_71011F6608,8,_ZN4ksys22MessageTransceiverBase2m2Ev -0x00000071011f6610,sub_71011F6610,8,_ZN4ksys22MessageTransceiverBase2m3Ev -0x00000071011f6618,sub_71011F6618,8,_ZN4ksys22MessageTransceiverBase2m4Ev -0x00000071011f6620,sub_71011F6620,8,_ZN4ksys22MessageTransceiverBase2m5Ev +0x00000071011f65ec,sub_71011F65EC,28,_ZNK4ksys22MessageTransceiverBase15isWaitingForAckEv +0x00000071011f6608,sub_71011F6608,8,_ZN4ksys22MessageTransceiverBase11sendMessageERKNS_16MesTransceiverIdERKNS_11MessageTypeEPvb +0x00000071011f6610,sub_71011F6610,8,_ZN4ksys22MessageTransceiverBase29sendMessageOnProcessingThreadERKNS_16MesTransceiverIdERKNS_11MessageTypeEPvb +0x00000071011f6618,sub_71011F6618,8,_ZN4ksys22MessageTransceiverBase11sendMessageERNS_14IMessageBrokerERKNS_11MessageTypeEPvb +0x00000071011f6620,sub_71011F6620,8,_ZN4ksys22MessageTransceiverBase29sendMessageOnProcessingThreadERNS_14IMessageBrokerERKNS_11MessageTypeEPvb 0x00000071011f6628,getGlobalMessage,8,_ZN4ksys22MessageTransceiverBase13getDispatcherEv 0x00000071011f6630,GlobalMessage::setGlobalPtr_,16,_ZN4ksys22MessageTransceiverBase19setGlobalDispatcherEPNS_21MessageDispatcherBaseE 0x00000071011f6640,sub_71011F6640,16,_ZNK4ksys22MessageTransceiverBase11getRegisterERNS_14IMessageBrokerE diff --git a/src/KingSystem/Utils/Thread/Message.cpp b/src/KingSystem/Utils/Thread/Message.cpp index 6841197c..186f8095 100644 --- a/src/KingSystem/Utils/Thread/Message.cpp +++ b/src/KingSystem/Utils/Thread/Message.cpp @@ -33,7 +33,7 @@ void* Message::getUserData() const { return mUserData; } -u32 Message::getField48() const { +u32 Message::getBrokerId() const { return mBrokerId; } @@ -55,7 +55,7 @@ void Message::setDestination(const MesTransceiverId& dest) { mDestination = dest; } -void Message::setField48(const u32& v) { +void Message::setBrokerId(const u32& v) { mBrokerId = v; } diff --git a/src/KingSystem/Utils/Thread/Message.h b/src/KingSystem/Utils/Thread/Message.h index 654688c2..b61ec25c 100644 --- a/src/KingSystem/Utils/Thread/Message.h +++ b/src/KingSystem/Utils/Thread/Message.h @@ -50,7 +50,7 @@ public: mDestination = other.getDestination(); mType = other.getType(); mUserData = other.getUserData(); - mBrokerId = other.getField48(); + mBrokerId = other.getBrokerId(); mDelayParams = other.mDelayParams; mShouldAck = other.shouldAck(); return *this; @@ -60,10 +60,10 @@ public: virtual const MesTransceiverId& getDestination() const; virtual const MessageType& getType() const; virtual void* getUserData() const; - virtual u32 getField48() const; + virtual u32 getBrokerId() const; virtual bool shouldAck() const; virtual void setDestination(const MesTransceiverId& dest); - virtual void setField48(const u32& v); + virtual void setBrokerId(const u32& v); virtual bool shouldBeProcessed() const; bool hasDelayer() const { return mDelayParams.delayer != nullptr; } diff --git a/src/KingSystem/Utils/Thread/MessageDispatcher.cpp b/src/KingSystem/Utils/Thread/MessageDispatcher.cpp index 840e001f..b1bdcf24 100644 --- a/src/KingSystem/Utils/Thread/MessageDispatcher.cpp +++ b/src/KingSystem/Utils/Thread/MessageDispatcher.cpp @@ -194,7 +194,7 @@ void MessageDispatcher::registerTransceiver(MessageReceiverEx& receiver) { } void MessageDispatcher::deregisterTransceiver(MessageReceiverEx& receiver) { - if (receiver.checkFlag() && receiver.checkCounter()) + if (receiver.checkFlag() && receiver.isWaitingForAck()) mUpdateEndEvent.wait(); const auto lock = sead::makeScopedLock(mCritSection); diff --git a/src/KingSystem/Utils/Thread/MessageReceiverEx.cpp b/src/KingSystem/Utils/Thread/MessageReceiverEx.cpp index 40a7b894..91564f13 100644 --- a/src/KingSystem/Utils/Thread/MessageReceiverEx.cpp +++ b/src/KingSystem/Utils/Thread/MessageReceiverEx.cpp @@ -12,22 +12,22 @@ int MessageReceiverEx::receive(const Message& message) { void MessageReceiverEx::receive(const MessageAck& ack) { handleAck(ack); - --mCounter; - static_cast(mCounter.load()); + --mNumPendingAcks; + static_cast(mNumPendingAcks.load()); } bool MessageReceiverEx::checkFlag() const { return mFlag && *mFlag == 1; } -bool MessageReceiverEx::checkCounter() const { - return mCounter > 0; +bool MessageReceiverEx::isWaitingForAck() const { + return mNumPendingAcks > 0; } -void MessageReceiverEx::setFlag(bool update_counter) { +void MessageReceiverEx::setFlag(bool ack_requested) { if (mFlag) { - if (update_counter) - mCounter.increment(); + if (ack_requested) + mNumPendingAcks.increment(); *mFlag = 1; } } diff --git a/src/KingSystem/Utils/Thread/MessageReceiverEx.h b/src/KingSystem/Utils/Thread/MessageReceiverEx.h index 80a10a15..b53c85f7 100644 --- a/src/KingSystem/Utils/Thread/MessageReceiverEx.h +++ b/src/KingSystem/Utils/Thread/MessageReceiverEx.h @@ -14,8 +14,8 @@ public: void receive(const MessageAck& ack) override; bool checkFlag() const; - bool checkCounter() const; - void setFlag(bool update_counter); + bool isWaitingForAck() const; + void setFlag(bool ack_requested); u8* getFlagPointer() const { return mFlag; } void setFlagPointer(u8* ptr); @@ -29,7 +29,7 @@ protected: private: u8* mFlag{}; - sead::Atomic mCounter; + sead::Atomic mNumPendingAcks; }; } // namespace ksys diff --git a/src/KingSystem/Utils/Thread/MessageTransceiverBase.cpp b/src/KingSystem/Utils/Thread/MessageTransceiverBase.cpp index d1c8a023..540c1f80 100644 --- a/src/KingSystem/Utils/Thread/MessageTransceiverBase.cpp +++ b/src/KingSystem/Utils/Thread/MessageTransceiverBase.cpp @@ -14,23 +14,29 @@ bool MessageTransceiverBase::checkReceiverFlag() const { return getReceiver()->checkFlag(); } -bool MessageTransceiverBase::checkReceiverCounter() const { - return getReceiver()->checkCounter(); +bool MessageTransceiverBase::isWaitingForAck() const { + return getReceiver()->isWaitingForAck(); } -bool MessageTransceiverBase::m2() { +bool MessageTransceiverBase::sendMessage(const MesTransceiverId& dest, const MessageType& type, + void* user_data, bool ack) { return false; } -bool MessageTransceiverBase::m3() { +bool MessageTransceiverBase::sendMessageOnProcessingThread(const MesTransceiverId& dest, + const MessageType& type, void* user_data, + bool ack) { return false; } -bool MessageTransceiverBase::m4() { +bool MessageTransceiverBase::sendMessage(IMessageBroker& broker, const MessageType& type, + void* user_data, bool ack) { return false; } -bool MessageTransceiverBase::m5() { +bool MessageTransceiverBase::sendMessageOnProcessingThread(IMessageBroker& broker, + const MessageType& type, void* user_data, + bool ack) { return false; } diff --git a/src/KingSystem/Utils/Thread/MessageTransceiverBase.h b/src/KingSystem/Utils/Thread/MessageTransceiverBase.h index 33ff4580..21ff106a 100644 --- a/src/KingSystem/Utils/Thread/MessageTransceiverBase.h +++ b/src/KingSystem/Utils/Thread/MessageTransceiverBase.h @@ -9,17 +9,22 @@ class IMessageBrokerRegister; class MessageDispatcherBase; struct MesTransceiverId; class MessageReceiverEx; +struct MessageType; class MessageTransceiverBase { public: MessageTransceiverBase(); virtual ~MessageTransceiverBase(); bool checkReceiverFlag() const; - bool checkReceiverCounter() const; - virtual bool m2(); - virtual bool m3(); - virtual bool m4(); - virtual bool m5(); + bool isWaitingForAck() const; + virtual bool sendMessage(const MesTransceiverId& dest, const MessageType& type, void* user_data, + bool ack); + virtual bool sendMessageOnProcessingThread(const MesTransceiverId& dest, + const MessageType& type, void* user_data, bool ack); + virtual bool sendMessage(IMessageBroker& broker, const MessageType& type, void* user_data, + bool ack); + virtual bool sendMessageOnProcessingThread(IMessageBroker& broker, const MessageType& type, + void* user_data, bool ack); virtual MessageReceiverEx* getReceiver() const = 0; MessageDispatcherBase* getDispatcher(); MesTransceiverId* getId() const { return mId; }