ksys: Add MessageTransceiverRxOnly

This commit is contained in:
Léo Lam 2021-02-05 00:46:13 +01:00
parent e237bf4b5d
commit 96612361e6
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
6 changed files with 90 additions and 18 deletions

View File

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

View File

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

View File

@ -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();
}

View File

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

View File

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

View File

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