mirror of https://github.com/zeldaret/botw.git
ksys: Add ActorMessageTransceiver
This commit is contained in:
parent
c2426371f7
commit
d5b981a233
|
|
@ -88895,21 +88895,21 @@
|
|||
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,
|
||||
0x00000071010c04d8,sub_71010C04D8,16,
|
||||
0x00000071010c04e8,sub_71010C04E8,128,
|
||||
0x00000071010c0568,sub_71010C0568,132,
|
||||
0x00000071010c05ec,sub_71010C05EC,80,
|
||||
0x00000071010c063c,sub_71010C063C,88,
|
||||
0x00000071010c0694,MessageSender::sendMaybe,188,
|
||||
0x00000071010c0750,sub_71010C0750,188,
|
||||
0x00000071010c080c,sub_71010C080C,236,
|
||||
0x00000071010c08f8,sub_71010C08F8,236,
|
||||
0x00000071010c09e4,sub_71010C09E4,8,
|
||||
0x00000071010c09ec,sub_71010C09EC,204,
|
||||
0x00000071010c0ab8,sub_71010C0AB8,92,
|
||||
0x00000071010c04a0,j_j_Struct1A::dtor,4,_ZN4ksys23ActorMessageTransceiver8ReceiverD1Ev
|
||||
0x00000071010c04a4,sub_71010C04A4,36,_ZN4ksys23ActorMessageTransceiver8ReceiverD0Ev
|
||||
0x00000071010c04c8,sub_71010C04C8,16,_ZN4ksys23ActorMessageTransceiver8Receiver13handleMessageERKNS_7MessageE
|
||||
0x00000071010c04d8,sub_71010C04D8,16,_ZN4ksys23ActorMessageTransceiver8Receiver9handleAckERKNS_10MessageAckE
|
||||
0x00000071010c04e8,sub_71010C04E8,128,_ZN4ksys23ActorMessageTransceiverC1ERNS0_8IHandlerE
|
||||
0x00000071010c0568,sub_71010C0568,132,_ZN4ksys23ActorMessageTransceiverC1ERNS0_8IHandlerEPNS_3act5ActorE
|
||||
0x00000071010c05ec,sub_71010C05EC,80,_ZN4ksys23ActorMessageTransceiverD1Ev
|
||||
0x00000071010c063c,sub_71010C063C,88,_ZN4ksys23ActorMessageTransceiverD0Ev
|
||||
0x00000071010c0694,MessageSender::sendMaybe,188,_ZN4ksys23ActorMessageTransceiver11sendMessageERKNS_16MesTransceiverIdERKNS_11MessageTypeEPvb
|
||||
0x00000071010c0750,sub_71010C0750,188,_ZN4ksys23ActorMessageTransceiver29sendMessageOnProcessingThreadERKNS_16MesTransceiverIdERKNS_11MessageTypeEPvb
|
||||
0x00000071010c080c,sub_71010C080C,236,_ZN4ksys23ActorMessageTransceiver11sendMessageERNS_14IMessageBrokerERKNS_11MessageTypeEPvb
|
||||
0x00000071010c08f8,sub_71010C08F8,236,_ZN4ksys23ActorMessageTransceiver29sendMessageOnProcessingThreadERNS_14IMessageBrokerERKNS_11MessageTypeEPvb
|
||||
0x00000071010c09e4,sub_71010C09E4,8,_ZN4ksys23ActorMessageTransceiver11getReceiverEv
|
||||
0x00000071010c09ec,sub_71010C09EC,204,_ZNK4ksys23ActorMessageTransceiver8Receiver27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||
0x00000071010c0ab8,sub_71010C0AB8,92,_ZNK4ksys23ActorMessageTransceiver8Receiver18getRuntimeTypeInfoEv
|
||||
0x00000071010c0b14,Event::ctorEvent,32,_ZN4ksys4util5EventC1Ev
|
||||
0x00000071010c0b34,Event::ctorDisposer,32,_ZN4ksys4util5EventC1EPN4sead4HeapE
|
||||
0x00000071010c0b54,Event::ctorEvent2,36,_ZN4ksys4util5EventC1Eb
|
||||
|
|
|
|||
|
Can't render this file because it is too large.
|
|
|
@ -33,6 +33,7 @@ public:
|
|||
_18 = 0x18,
|
||||
_25 = 0x25,
|
||||
_2b = 0x2b,
|
||||
_2e = 0x2e,
|
||||
};
|
||||
|
||||
enum class DeleteType {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
target_sources(uking PRIVATE
|
||||
Thread/ActorMessageTransceiver.cpp
|
||||
Thread/ActorMessageTransceiver.h
|
||||
Thread/Event.cpp
|
||||
Thread/Event.h
|
||||
Thread/GameTaskThread.cpp
|
||||
|
|
|
|||
|
|
@ -0,0 +1,62 @@
|
|||
#include "KingSystem/Utils/Thread/ActorMessageTransceiver.h"
|
||||
#include "KingSystem/ActorSystem/actActor.h"
|
||||
#include "KingSystem/Utils/Thread/MessageTransceiverCommon.h"
|
||||
|
||||
namespace ksys {
|
||||
|
||||
ActorMessageTransceiver::ActorMessageTransceiver(IHandler& handler) : mReceiver(handler) {
|
||||
registerReceiver(mReceiver);
|
||||
}
|
||||
|
||||
ActorMessageTransceiver::ActorMessageTransceiver(IHandler& handler, act::Actor* actor)
|
||||
: mReceiver(handler), mActor(actor) {
|
||||
registerReceiver(mReceiver);
|
||||
}
|
||||
|
||||
ActorMessageTransceiver::~ActorMessageTransceiver() {
|
||||
deregisterReceiver(mReceiver);
|
||||
}
|
||||
|
||||
bool ActorMessageTransceiver::getDebugArg(bool ack) const {
|
||||
return mActor && mActor->checkFlag(act::Actor::ActorFlag::_2e) && ack;
|
||||
}
|
||||
|
||||
bool ActorMessageTransceiver::sendMessage(const MesTransceiverId& dest, const MessageType& type,
|
||||
void* user_data, bool ack) {
|
||||
return sendMessageImpl(this, dest, type, user_data, ack, getDebugArg(ack));
|
||||
}
|
||||
|
||||
bool ActorMessageTransceiver::sendMessageOnProcessingThread(const MesTransceiverId& dest,
|
||||
const MessageType& type,
|
||||
void* user_data, bool ack) {
|
||||
return sendMessageOnProcessingThreadImpl(this, dest, type, user_data, ack, getDebugArg(ack));
|
||||
}
|
||||
|
||||
bool ActorMessageTransceiver::sendMessage(IMessageBroker& broker, const MessageType& type,
|
||||
void* user_data, bool ack) {
|
||||
return sendMessageImpl(this, broker, type, user_data, ack, getDebugArg(ack));
|
||||
}
|
||||
|
||||
bool ActorMessageTransceiver::sendMessageOnProcessingThread(IMessageBroker& broker,
|
||||
const MessageType& type,
|
||||
void* user_data, bool ack) {
|
||||
return sendMessageOnProcessingThreadImpl(this, broker, type, user_data, ack, getDebugArg(ack));
|
||||
}
|
||||
|
||||
MessageReceiverEx* ActorMessageTransceiver::getReceiver() {
|
||||
return &mReceiver;
|
||||
}
|
||||
|
||||
ActorMessageTransceiver::Receiver::Receiver(IHandler& handler) : mHandler(handler) {}
|
||||
|
||||
ActorMessageTransceiver::Receiver::~Receiver() = default;
|
||||
|
||||
int ActorMessageTransceiver::Receiver::handleMessage(const Message& message) {
|
||||
return mHandler.handleMessage(message);
|
||||
}
|
||||
|
||||
void ActorMessageTransceiver::Receiver::handleAck(const MessageAck& ack) {
|
||||
return mHandler.handleAck(ack);
|
||||
}
|
||||
|
||||
} // namespace ksys
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
#pragma once
|
||||
|
||||
#include "KingSystem/Utils/Thread/MessageTransceiverBase.h"
|
||||
#include "KingSystem/Utils/Thread/MessageTransceiverRxOnly.h"
|
||||
#include "KingSystem/Utils/Thread/MessageTransceiverTxOnly.h"
|
||||
|
||||
namespace ksys {
|
||||
|
||||
namespace act {
|
||||
class Actor;
|
||||
}
|
||||
|
||||
class ActorMessageTransceiver final : public MessageTransceiverBase {
|
||||
public:
|
||||
class IHandler : public MessageTransceiverRxOnly::IHandler,
|
||||
public MessageTransceiverTxOnly::IHandler {};
|
||||
KSYS_CHECK_SIZE_NX150(IHandler, 0x10);
|
||||
|
||||
explicit ActorMessageTransceiver(IHandler& handler);
|
||||
explicit ActorMessageTransceiver(IHandler& handler, act::Actor* actor);
|
||||
~ActorMessageTransceiver() override;
|
||||
bool sendMessage(const MesTransceiverId& dest, const MessageType& type, void* user_data,
|
||||
bool ack) override;
|
||||
bool sendMessageOnProcessingThread(const MesTransceiverId& dest, const MessageType& type,
|
||||
void* user_data, bool ack) override;
|
||||
bool sendMessage(IMessageBroker& broker, const MessageType& type, void* user_data,
|
||||
bool ack) override;
|
||||
bool sendMessageOnProcessingThread(IMessageBroker& broker, const MessageType& type,
|
||||
void* user_data, bool ack) override;
|
||||
MessageReceiverEx* getReceiver() override;
|
||||
|
||||
private:
|
||||
class Receiver : public MessageReceiverEx {
|
||||
SEAD_RTTI_OVERRIDE(Receiver, MessageReceiverEx)
|
||||
public:
|
||||
explicit Receiver(IHandler& handler);
|
||||
~Receiver() override;
|
||||
int handleMessage(const Message& message) override;
|
||||
void handleAck(const MessageAck& ack) override;
|
||||
|
||||
private:
|
||||
IHandler& mHandler;
|
||||
};
|
||||
|
||||
// TODO: rename if we figure out what this is used for
|
||||
bool getDebugArg(bool ack) const;
|
||||
|
||||
Receiver mReceiver;
|
||||
act::Actor* mActor{};
|
||||
};
|
||||
|
||||
} // namespace ksys
|
||||
|
|
@ -7,10 +7,10 @@ namespace ksys {
|
|||
|
||||
template <class T>
|
||||
bool sendMessageImpl(T* transceiver, const MesTransceiverId& dest, const MessageType& type,
|
||||
void* user_data, bool ack) {
|
||||
void* user_data, bool ack, bool x = false) {
|
||||
MessageDispatcherBase* dispatcher = transceiver->getDispatcher();
|
||||
const bool ok = dispatcher->sendMessage(*transceiver->getReceiver()->MessageReceiver::getId(),
|
||||
dest, type, user_data, ack, false);
|
||||
dest, type, user_data, ack, x);
|
||||
|
||||
if (ok)
|
||||
transceiver->getReceiver()->setFlag(ack);
|
||||
|
|
@ -20,10 +20,11 @@ bool sendMessageImpl(T* transceiver, const MesTransceiverId& dest, const Message
|
|||
|
||||
template <class T>
|
||||
bool sendMessageOnProcessingThreadImpl(T* transceiver, const MesTransceiverId& dest,
|
||||
const MessageType& type, void* user_data, bool ack) {
|
||||
const MessageType& type, void* user_data, bool ack,
|
||||
bool x = false) {
|
||||
MessageDispatcherBase* dispatcher = transceiver->getDispatcher();
|
||||
const bool ok = dispatcher->sendMessageOnProcessingThread(
|
||||
*transceiver->getReceiver()->MessageReceiver::getId(), dest, type, user_data, ack, false);
|
||||
*transceiver->getReceiver()->MessageReceiver::getId(), dest, type, user_data, ack, x);
|
||||
|
||||
if (ok)
|
||||
transceiver->getReceiver()->setFlag(ack);
|
||||
|
|
@ -33,11 +34,11 @@ bool sendMessageOnProcessingThreadImpl(T* transceiver, const MesTransceiverId& d
|
|||
|
||||
template <class T>
|
||||
bool sendMessageImpl(T* transceiver, IMessageBroker& broker, const MessageType& type,
|
||||
void* user_data, bool ack) {
|
||||
void* user_data, bool ack, bool x = false) {
|
||||
MessageDispatcherBase* dispatcher = transceiver->getDispatcher();
|
||||
const bool ok =
|
||||
dispatcher->sendMessage(*transceiver->getReceiver()->MessageReceiver::getId(),
|
||||
*transceiver->getRegister(broker), type, user_data, ack, false);
|
||||
*transceiver->getRegister(broker), type, user_data, ack, x);
|
||||
|
||||
if (ok) {
|
||||
for (int i = 0, n = broker.countTransceivers(); i < n; ++i)
|
||||
|
|
@ -49,11 +50,12 @@ bool sendMessageImpl(T* transceiver, IMessageBroker& broker, const MessageType&
|
|||
|
||||
template <class T>
|
||||
bool sendMessageOnProcessingThreadImpl(T* transceiver, IMessageBroker& broker,
|
||||
const MessageType& type, void* user_data, bool ack) {
|
||||
const MessageType& type, void* user_data, bool ack,
|
||||
bool x = false) {
|
||||
MessageDispatcherBase* dispatcher = transceiver->getDispatcher();
|
||||
const bool ok = dispatcher->sendMessageOnProcessingThread(
|
||||
*transceiver->getReceiver()->MessageReceiver::getId(), *transceiver->getRegister(broker),
|
||||
type, user_data, ack, false);
|
||||
type, user_data, ack, x);
|
||||
|
||||
if (ok) {
|
||||
for (int i = 0, n = broker.countTransceivers(); i < n; ++i)
|
||||
|
|
|
|||
Loading…
Reference in New Issue