mirror of https://github.com/zeldaret/botw.git
ksys: Add MessageTransceiverRxOnly
This commit is contained in:
parent
e237bf4b5d
commit
96612361e6
|
|
@ -92684,8 +92684,8 @@
|
|||
0x00000071011f65a4,getGlobalMessagePtr,36,_ZN4ksys22MessageTransceiverBaseC2Ev
|
||||
0x00000071011f65c8,nullsub_4673,4,_ZN4ksys22MessageTransceiverBaseD1Ev
|
||||
0x00000071011f65cc,j__ZdlPv_1225,4,_ZN4ksys22MessageTransceiverBaseD0Ev
|
||||
0x00000071011f65d0,sub_71011F65D0,28,_ZNK4ksys22MessageTransceiverBase17checkReceiverFlagEv
|
||||
0x00000071011f65ec,sub_71011F65EC,28,_ZNK4ksys22MessageTransceiverBase15isWaitingForAckEv
|
||||
0x00000071011f65d0,sub_71011F65D0,28,_ZN4ksys22MessageTransceiverBase17checkReceiverFlagEv
|
||||
0x00000071011f65ec,sub_71011F65EC,28,_ZN4ksys22MessageTransceiverBase15isWaitingForAckEv
|
||||
0x00000071011f6608,sub_71011F6608,8,_ZN4ksys22MessageTransceiverBase11sendMessageERKNS_16MesTransceiverIdERKNS_11MessageTypeEPvb
|
||||
0x00000071011f6610,sub_71011F6610,8,_ZN4ksys22MessageTransceiverBase29sendMessageOnProcessingThreadERKNS_16MesTransceiverIdERKNS_11MessageTypeEPvb
|
||||
0x00000071011f6618,sub_71011F6618,8,_ZN4ksys22MessageTransceiverBase11sendMessageERNS_14IMessageBrokerERKNS_11MessageTypeEPvb
|
||||
|
|
@ -92693,15 +92693,15 @@
|
|||
0x00000071011f6628,getGlobalMessage,8,_ZN4ksys22MessageTransceiverBase13getDispatcherEv
|
||||
0x00000071011f6630,GlobalMessage::setGlobalPtr_,16,_ZN4ksys22MessageTransceiverBase19setGlobalDispatcherEPNS_21MessageDispatcherBaseE
|
||||
0x00000071011f6640,sub_71011F6640,16,_ZNK4ksys22MessageTransceiverBase11getRegisterERNS_14IMessageBrokerE
|
||||
0x00000071011f6650,j_j_Struct1A::dtor_1,4,
|
||||
0x00000071011f6654,sub_71011F6654,36,
|
||||
0x00000071011f6678,sub_71011F6678,16,
|
||||
0x00000071011f6688,sub_71011F6688,128,
|
||||
0x00000071011f6708,sub_71011F6708,80,
|
||||
0x00000071011f6758,sub_71011F6758,88,
|
||||
0x00000071011f67b0,sub_71011F67B0,8,
|
||||
0x00000071011f67b8,sub_71011F67B8,204,
|
||||
0x00000071011f6884,sub_71011F6884,92,
|
||||
0x00000071011f6650,j_j_Struct1A::dtor_1,4,_ZN4ksys24MessageTransceiverRxOnly8ReceiverD1Ev
|
||||
0x00000071011f6654,sub_71011F6654,36,_ZN4ksys24MessageTransceiverRxOnly8ReceiverD0Ev
|
||||
0x00000071011f6678,sub_71011F6678,16,_ZN4ksys24MessageTransceiverRxOnly8Receiver13handleMessageERKNS_7MessageE
|
||||
0x00000071011f6688,sub_71011F6688,128,_ZN4ksys24MessageTransceiverRxOnlyC1ERNS0_8IHandlerE
|
||||
0x00000071011f6708,sub_71011F6708,80,_ZN4ksys24MessageTransceiverRxOnlyD1Ev
|
||||
0x00000071011f6758,sub_71011F6758,88,_ZN4ksys24MessageTransceiverRxOnlyD0Ev
|
||||
0x00000071011f67b0,sub_71011F67B0,8,_ZN4ksys24MessageTransceiverRxOnly11getReceiverEv
|
||||
0x00000071011f67b8,sub_71011F67B8,204,_ZNK4ksys24MessageTransceiverRxOnly8Receiver27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||
0x00000071011f6884,sub_71011F6884,92,_ZNK4ksys24MessageTransceiverRxOnly8Receiver18getRuntimeTypeInfoEv
|
||||
0x00000071011f68e0,Thread::ctor,108,_ZN4ksys4util10TaskThreadC1ERKN4sead14SafeStringBaseIcEEPNS2_4HeapEiNS2_12MessageQueue9BlockTypeElii
|
||||
0x00000071011f694c,Thread::dtor,120,_ZN4ksys4util10TaskThreadD1Ev
|
||||
0x00000071011f69c4,Thread::dtorDelete,128,_ZN4ksys4util10TaskThreadD0Ev
|
||||
|
|
|
|||
|
Can't render this file because it is too large.
|
|
|
@ -29,6 +29,8 @@ target_sources(uking PRIVATE
|
|||
Thread/MessageTransceiverBase.h
|
||||
Thread/MessageTransceiverId.cpp
|
||||
Thread/MessageTransceiverId.h
|
||||
Thread/MessageTransceiverRxOnly.cpp
|
||||
Thread/MessageTransceiverRxOnly.h
|
||||
Thread/Task.cpp
|
||||
Thread/Task.h
|
||||
Thread/TaskData.h
|
||||
|
|
|
|||
|
|
@ -10,11 +10,11 @@ MessageTransceiverBase::MessageTransceiverBase() = default;
|
|||
|
||||
MessageTransceiverBase::~MessageTransceiverBase() = default;
|
||||
|
||||
bool MessageTransceiverBase::checkReceiverFlag() const {
|
||||
bool MessageTransceiverBase::checkReceiverFlag() {
|
||||
return getReceiver()->checkFlag();
|
||||
}
|
||||
|
||||
bool MessageTransceiverBase::isWaitingForAck() const {
|
||||
bool MessageTransceiverBase::isWaitingForAck() {
|
||||
return getReceiver()->isWaitingForAck();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,22 +1,22 @@
|
|||
#pragma once
|
||||
|
||||
#include <basis/seadTypes.h>
|
||||
#include "KingSystem/Utils/Thread/MessageDispatcherBase.h"
|
||||
#include "KingSystem/Utils/Thread/MessageReceiverEx.h"
|
||||
|
||||
namespace ksys {
|
||||
|
||||
class IMessageBroker;
|
||||
class IMessageBrokerRegister;
|
||||
class MessageDispatcherBase;
|
||||
struct MesTransceiverId;
|
||||
class MessageReceiverEx;
|
||||
struct MessageType;
|
||||
|
||||
class MessageTransceiverBase {
|
||||
public:
|
||||
MessageTransceiverBase();
|
||||
virtual ~MessageTransceiverBase();
|
||||
bool checkReceiverFlag() const;
|
||||
bool isWaitingForAck() const;
|
||||
bool checkReceiverFlag();
|
||||
bool isWaitingForAck();
|
||||
virtual bool sendMessage(const MesTransceiverId& dest, const MessageType& type, void* user_data,
|
||||
bool ack);
|
||||
virtual bool sendMessageOnProcessingThread(const MesTransceiverId& dest,
|
||||
|
|
@ -25,13 +25,23 @@ public:
|
|||
bool ack);
|
||||
virtual bool sendMessageOnProcessingThread(IMessageBroker& broker, const MessageType& type,
|
||||
void* user_data, bool ack);
|
||||
virtual MessageReceiverEx* getReceiver() const = 0;
|
||||
virtual MessageReceiverEx* getReceiver() = 0;
|
||||
MessageDispatcherBase* getDispatcher();
|
||||
MesTransceiverId* getId() const { return mId; }
|
||||
IMessageBrokerRegister* getRegister(IMessageBroker& broker) const;
|
||||
|
||||
static void setGlobalDispatcher(MessageDispatcherBase* dispatcher);
|
||||
|
||||
protected:
|
||||
void registerReceiver(MessageReceiverEx& receiver) {
|
||||
getDispatcher()->registerTransceiver(receiver);
|
||||
mId = receiver.MessageReceiver::getId();
|
||||
}
|
||||
|
||||
void deregisterReceiver(MessageReceiverEx& receiver) {
|
||||
getDispatcher()->deregisterTransceiver(receiver);
|
||||
}
|
||||
|
||||
private:
|
||||
static MessageDispatcherBase* sDispatcher;
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,23 @@
|
|||
#include "KingSystem/Utils/Thread/MessageTransceiverRxOnly.h"
|
||||
|
||||
namespace ksys {
|
||||
|
||||
MessageTransceiverRxOnly::MessageTransceiverRxOnly(IHandler& handler) : mReceiver(handler) {
|
||||
registerReceiver(mReceiver);
|
||||
}
|
||||
|
||||
MessageTransceiverRxOnly::~MessageTransceiverRxOnly() {
|
||||
deregisterReceiver(mReceiver);
|
||||
}
|
||||
|
||||
MessageReceiverEx* MessageTransceiverRxOnly::getReceiver() {
|
||||
return &mReceiver;
|
||||
}
|
||||
|
||||
MessageTransceiverRxOnly::Receiver::~Receiver() = default;
|
||||
|
||||
int MessageTransceiverRxOnly::Receiver::handleMessage(const Message& message) {
|
||||
return mHandler.handleMessage(message);
|
||||
}
|
||||
|
||||
} // namespace ksys
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
#pragma once
|
||||
|
||||
#include "KingSystem/Utils/Thread/MessageReceiverEx.h"
|
||||
#include "KingSystem/Utils/Thread/MessageTransceiverBase.h"
|
||||
|
||||
namespace ksys {
|
||||
|
||||
class Message;
|
||||
|
||||
class MessageTransceiverRxOnly : public MessageTransceiverBase {
|
||||
public:
|
||||
class IHandler {
|
||||
public:
|
||||
virtual ~IHandler() = default;
|
||||
virtual int handleMessage(const Message& message) = 0;
|
||||
};
|
||||
|
||||
explicit MessageTransceiverRxOnly(IHandler& handler);
|
||||
~MessageTransceiverRxOnly() override;
|
||||
MessageReceiverEx* getReceiver() override;
|
||||
|
||||
private:
|
||||
class Receiver : public MessageReceiverEx {
|
||||
SEAD_RTTI_OVERRIDE(Receiver, MessageReceiverEx)
|
||||
public:
|
||||
explicit Receiver(IHandler& handler) : mHandler(handler) {}
|
||||
~Receiver() override;
|
||||
int handleMessage(const Message& message) override;
|
||||
|
||||
private:
|
||||
IHandler& mHandler;
|
||||
};
|
||||
|
||||
Receiver mReceiver;
|
||||
};
|
||||
|
||||
} // namespace ksys
|
||||
Loading…
Reference in New Issue