mirror of https://github.com/zeldaret/botw.git
ksys: Add Message class
This commit is contained in:
parent
d6ee0c9183
commit
176d687698
|
@ -88834,20 +88834,20 @@
|
|||
0x00000071010bf9d0,sub_71010BF9D0,16,
|
||||
0x00000071010bf9e0,DualHeap::rtti1,288,
|
||||
0x00000071010bfb00,DualHeap::rtti2,92,
|
||||
0x00000071010bfb5c,GlobalMessage::sc::ctor,68,
|
||||
0x00000071010bfba0,sub_71010BFBA0,132,
|
||||
0x00000071010bfc24,sub_71010BFC24,104,
|
||||
0x00000071010bfc8c,sub_71010BFC8C,36,
|
||||
0x00000071010bfcb0,j__ZdlPv_1194,4,
|
||||
0x00000071010bfcb4,sub_71010BFCB4,8,
|
||||
0x00000071010bfcbc,sub_71010BFCBC,8,
|
||||
0x00000071010bfcc4,sub_71010BFCC4,8,
|
||||
0x00000071010bfccc,sub_71010BFCCC,8,
|
||||
0x00000071010bfcd4,sub_71010BFCD4,8,
|
||||
0x00000071010bfcdc,sub_71010BFCDC,44,
|
||||
0x00000071010bfd08,sub_71010BFD08,8,
|
||||
0x00000071010bfd10,sub_71010BFD10,36,
|
||||
0x00000071010bfd34,sub_71010BFD34,12,
|
||||
0x00000071010bfb5c,GlobalMessage::sc::ctor,68,_ZN4ksys7MessageC1Ev
|
||||
0x00000071010bfba0,sub_71010BFBA0,132,_ZN4ksys7MessageC1ERKNS_16MesTransceiverIdES3_RKNS_11MessageTypeEPvRKNS0_11DelayParamsEb
|
||||
0x00000071010bfc24,sub_71010BFC24,104,_ZN4ksys7MessageC1ERKNS_16MesTransceiverIdERKNS_11MessageTypeEPvRKNS0_11DelayParamsEb
|
||||
0x00000071010bfc8c,sub_71010BFC8C,36,_ZN4ksys7MessageD1Ev
|
||||
0x00000071010bfcb0,j__ZdlPv_1194,4,_ZN4ksys7MessageD0Ev
|
||||
0x00000071010bfcb4,sub_71010BFCB4,8,_ZNK4ksys7Message9getSourceEv
|
||||
0x00000071010bfcbc,sub_71010BFCBC,8,_ZNK4ksys7Message14getDestinationEv
|
||||
0x00000071010bfcc4,sub_71010BFCC4,8,_ZNK4ksys7Message7getTypeEv
|
||||
0x00000071010bfccc,sub_71010BFCCC,8,_ZNK4ksys7Message11getUserDataEv
|
||||
0x00000071010bfcd4,sub_71010BFCD4,8,_ZNK4ksys7Message10getField48Ev
|
||||
0x00000071010bfcdc,sub_71010BFCDC,44,_ZNK4ksys7Message17shouldBeProcessedEv
|
||||
0x00000071010bfd08,sub_71010BFD08,8,_ZNK4ksys7Message10getField60Ev
|
||||
0x00000071010bfd10,sub_71010BFD10,36,_ZN4ksys7Message14setDestinationERKNS_16MesTransceiverIdE
|
||||
0x00000071010bfd34,sub_71010BFD34,12,_ZN4ksys7Message10setField48ERKj
|
||||
0x00000071010bfd40,Struct1A::ctor,56,_ZN4ksys15MessageReceiverC1Ev
|
||||
0x00000071010bfd78,Struct1A::dtor,28,_ZN4ksys15MessageReceiverD1Ev
|
||||
0x00000071010bfd94,j__ZdlPv_1195,4,_ZN4ksys15MessageReceiverD0Ev
|
||||
|
@ -92681,7 +92681,7 @@
|
|||
0x00000071011f6474,sub_71011F6474,8,
|
||||
0x00000071011f647c,sub_71011F647C,204,
|
||||
0x00000071011f6548,sub_71011F6548,92,
|
||||
0x00000071011f65a4,getGlobalMessagePtr,36,_ZN4ksys22MessageTransceiverBaseC1Ev
|
||||
0x00000071011f65a4,getGlobalMessagePtr,36,_ZN4ksys22MessageTransceiverBaseC2Ev
|
||||
0x00000071011f65c8,nullsub_4673,4,_ZN4ksys22MessageTransceiverBaseD1Ev
|
||||
0x00000071011f65cc,j__ZdlPv_1225,4,_ZN4ksys22MessageTransceiverBaseD0Ev
|
||||
0x00000071011f65d0,sub_71011F65D0,28,_ZNK4ksys22MessageTransceiverBase18checkGeneratorFlagEv
|
||||
|
|
Can't render this file because it is too large.
|
|
@ -7,6 +7,8 @@ target_sources(uking PRIVATE
|
|||
Thread/ManagedTask.h
|
||||
Thread/ManagedTaskHandle.cpp
|
||||
Thread/ManagedTaskHandle.h
|
||||
Thread/Message.cpp
|
||||
Thread/Message.h
|
||||
Thread/MessageDispatcherBase.cpp
|
||||
Thread/MessageDispatcherBase.h
|
||||
Thread/MessageReceiver.cpp
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
#include "KingSystem/Utils/Thread/Message.h"
|
||||
|
||||
namespace ksys {
|
||||
|
||||
Message::Message() = default;
|
||||
|
||||
Message::Message(const MesTransceiverId& source, const MesTransceiverId& destination,
|
||||
const MessageType& type, void* user_data, const Message::DelayParams& delay_params,
|
||||
bool x)
|
||||
: mSource(source), mDestination(destination), mType(type), mUserData(user_data),
|
||||
mDelayParams(delay_params), _60(x) {}
|
||||
|
||||
Message::Message(const MesTransceiverId& source, const MessageType& type, void* user_data,
|
||||
const Message::DelayParams& delay_params, bool x)
|
||||
: mSource(source), mType(type), mUserData(user_data), mDelayParams(delay_params), _60(x) {}
|
||||
|
||||
Message::~Message() = default;
|
||||
|
||||
const MesTransceiverId& Message::getSource() const {
|
||||
return mSource;
|
||||
}
|
||||
|
||||
const MesTransceiverId& Message::getDestination() const {
|
||||
return mDestination;
|
||||
}
|
||||
|
||||
const MessageType& Message::getType() const {
|
||||
return mType;
|
||||
}
|
||||
|
||||
void* Message::getUserData() const {
|
||||
return mUserData;
|
||||
}
|
||||
|
||||
u32 Message::getField48() const {
|
||||
return _48;
|
||||
}
|
||||
|
||||
bool Message::shouldBeProcessed() const {
|
||||
if (mDelayParams.delay_ticks != 0)
|
||||
return false;
|
||||
|
||||
if (!mDelayParams.delayer)
|
||||
return true;
|
||||
|
||||
return mDelayParams.delayer->shouldProcessMessage();
|
||||
}
|
||||
|
||||
bool Message::getField60() const {
|
||||
return _60;
|
||||
}
|
||||
|
||||
void Message::setDestination(const MesTransceiverId& dest) {
|
||||
mDestination = dest;
|
||||
}
|
||||
|
||||
void Message::setField48(const u32& v) {
|
||||
_48 = v;
|
||||
}
|
||||
|
||||
} // namespace ksys
|
|
@ -0,0 +1,67 @@
|
|||
#pragma once
|
||||
|
||||
#include <basis/seadTypes.h>
|
||||
|
||||
#include "KingSystem/Utils/Thread/MessageTransceiverId.h"
|
||||
|
||||
namespace ksys {
|
||||
|
||||
struct MessageType {
|
||||
MessageType() = default;
|
||||
MessageType(u32 v) : value(v) {} // NOLINT(google-explicit-constructor)
|
||||
|
||||
u32 value;
|
||||
};
|
||||
|
||||
class MessageDelayer {
|
||||
public:
|
||||
MessageDelayer() = default;
|
||||
virtual ~MessageDelayer() = default;
|
||||
virtual bool shouldProcessMessage() = 0;
|
||||
};
|
||||
|
||||
class Message {
|
||||
public:
|
||||
struct DelayParams {
|
||||
DelayParams() : delay_ticks(), delayer() {}
|
||||
DelayParams(const DelayParams& other) { *this = other; }
|
||||
// Yes, this operator is quite pointless, but we need it to match.
|
||||
DelayParams& operator=(const DelayParams& other) {
|
||||
delay_ticks = other.delay_ticks;
|
||||
delayer = other.delayer;
|
||||
return *this;
|
||||
}
|
||||
|
||||
int delay_ticks;
|
||||
MessageDelayer* delayer;
|
||||
};
|
||||
|
||||
Message();
|
||||
Message(const MesTransceiverId& source, const MesTransceiverId& destination,
|
||||
const MessageType& type, void* user_data, const DelayParams& delay_params, bool x);
|
||||
Message(const MesTransceiverId& source, const MessageType& type, void* user_data,
|
||||
const DelayParams& delay_params, bool x);
|
||||
|
||||
virtual ~Message();
|
||||
|
||||
virtual const MesTransceiverId& getSource() const;
|
||||
virtual const MesTransceiverId& getDestination() const;
|
||||
virtual const MessageType& getType() const;
|
||||
virtual void* getUserData() const;
|
||||
virtual u32 getField48() const;
|
||||
virtual bool getField60() const;
|
||||
virtual void setDestination(const MesTransceiverId& dest);
|
||||
virtual void setField48(const u32& v);
|
||||
virtual bool shouldBeProcessed() const;
|
||||
|
||||
private:
|
||||
MesTransceiverId mSource{};
|
||||
MesTransceiverId mDestination{};
|
||||
MessageType mType{};
|
||||
void* mUserData{};
|
||||
u32 _48 = 0xffffffff;
|
||||
DelayParams mDelayParams{};
|
||||
bool _60 = true;
|
||||
};
|
||||
|
||||
} // namespace ksys
|
|
@ -9,8 +9,9 @@ namespace ksys {
|
|||
class MessageReceiver;
|
||||
|
||||
struct MesTransceiverId {
|
||||
MesTransceiverId() { reset(); }
|
||||
MesTransceiverId(u32& id, MessageReceiver* receiver) : id(++id), receiver(receiver) {}
|
||||
MesTransceiverId() : receiver(), next() { reset(); }
|
||||
MesTransceiverId(const MesTransceiverId& other) { *this = other; }
|
||||
MesTransceiverId(u32& id, MessageReceiver* receiver) : id(++id), receiver(receiver), next() {}
|
||||
~MesTransceiverId() { reset(); }
|
||||
|
||||
void reset() {
|
||||
|
@ -30,8 +31,8 @@ struct MesTransceiverId {
|
|||
|
||||
u32 queue_id = 0xffffffff;
|
||||
u32 id = 0xffffffff;
|
||||
MessageReceiver* receiver{};
|
||||
MesTransceiverId** next{};
|
||||
MessageReceiver* receiver;
|
||||
MesTransceiverId** next;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(MesTransceiverId, 0x18);
|
||||
|
||||
|
|
Loading…
Reference in New Issue