From d5b981a233dd625815798e7f0db91fd14c2a30d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Fri, 5 Feb 2021 18:10:37 +0100 Subject: ksys: Add ActorMessageTransceiver --- .../Utils/Thread/ActorMessageTransceiver.cpp | 62 ++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/KingSystem/Utils/Thread/ActorMessageTransceiver.cpp (limited to 'src/KingSystem/Utils/Thread/ActorMessageTransceiver.cpp') diff --git a/src/KingSystem/Utils/Thread/ActorMessageTransceiver.cpp b/src/KingSystem/Utils/Thread/ActorMessageTransceiver.cpp new file mode 100644 index 00000000..5646de14 --- /dev/null +++ b/src/KingSystem/Utils/Thread/ActorMessageTransceiver.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 -- cgit v1.2.3