From 112c20b7d35f4f93c65fbd1f7c26342150486651 Mon Sep 17 00:00:00 2001 From: k0t9i Date: Thu, 26 Jan 2023 14:58:19 +0400 Subject: [PATCH] feat: change message api to one interface --- L2BotCore/Domain/DTO/Message.h | 52 +++++++++++++++++ .../Serializers/SerializableStateContainer.h | 56 ------------------- L2BotCore/L2BotCore.vcxproj | 2 +- L2BotCore/L2BotCore.vcxproj.filters | 6 +- L2BotDll/Services/WorldHandler.h | 45 ++++++++------- 5 files changed, 81 insertions(+), 80 deletions(-) create mode 100644 L2BotCore/Domain/DTO/Message.h delete mode 100644 L2BotCore/Domain/Serializers/SerializableStateContainer.h diff --git a/L2BotCore/Domain/DTO/Message.h b/L2BotCore/Domain/DTO/Message.h new file mode 100644 index 0000000..1857d32 --- /dev/null +++ b/L2BotCore/Domain/DTO/Message.h @@ -0,0 +1,52 @@ +#pragma once +#pragma once + +#include +#include +#include "../Entities/EntityInterface.h" +#include "../Enums/EntityStateEnum.h" + +namespace L2Bot::Domain::DTO +{ + class Message : public Serializers::Serializable + { + public: + const std::vector BuildSerializationNodes() const override + { + std::wstring operation = L"none"; + switch (m_Operation) + { + case Enums::EntityStateEnum::created: + operation = L"create"; + break; + case Enums::EntityStateEnum::updated: + operation = L"update"; + break; + case Enums::EntityStateEnum::deleted: + operation = L"delete"; + } + + return + { + Serializers::Node{ L"type", m_Type }, + Serializers::Node{ L"operation", operation }, + Serializers::Node{L"content", m_Content.BuildSerializationNodes()} + }; + } + + Message(const std::wstring& type, const Enums::EntityStateEnum operation, const Serializers::Serializable& content) : + m_Type(type), + m_Operation(operation), + m_Content(content) + { + + } + + Message() = default; + virtual ~Message() = default; + private: + const std::wstring m_Type; + const Enums::EntityStateEnum m_Operation; + const Serializers::Serializable& m_Content; + }; +} \ No newline at end of file diff --git a/L2BotCore/Domain/Serializers/SerializableStateContainer.h b/L2BotCore/Domain/Serializers/SerializableStateContainer.h deleted file mode 100644 index fa55037..0000000 --- a/L2BotCore/Domain/Serializers/SerializableStateContainer.h +++ /dev/null @@ -1,56 +0,0 @@ -#pragma once -#include -#include "../DTO/EntityState.h" -#include "Serializable.h" - -namespace L2Bot::Domain::Serializers -{ - class SerializableStateContainer : public Serializers::Serializable - { - public: - const std::vector BuildSerializationNodes() const override - { - std::vector result; - - for (const auto& kvp : m_Objects) - { - std::wstring operationName = L""; - switch (kvp->GetState()) - { - case Enums::EntityStateEnum::created: - operationName = L"created"; - break; - case Enums::EntityStateEnum::updated: - operationName = L"updated"; - break; - case Enums::EntityStateEnum::deleted: - operationName = L"deleted"; - break; - } - - if (operationName != L"") - { - result.push_back( - { - m_ContainerName, - std::vector{ { operationName, kvp->GetEntity()->BuildSerializationNodes() } } - } - ); - } - } - - return result; - } - - SerializableStateContainer(const std::vector> objects, const std::wstring& containerName) : - m_Objects(objects), m_ContainerName(containerName) - { - - } - SerializableStateContainer() = delete; - virtual ~SerializableStateContainer() = default; - private: - const std::vector> m_Objects; - const std::wstring m_ContainerName; - }; -} \ No newline at end of file diff --git a/L2BotCore/L2BotCore.vcxproj b/L2BotCore/L2BotCore.vcxproj index 556d21d..0993b1e 100644 --- a/L2BotCore/L2BotCore.vcxproj +++ b/L2BotCore/L2BotCore.vcxproj @@ -160,6 +160,7 @@ + @@ -195,7 +196,6 @@ - diff --git a/L2BotCore/L2BotCore.vcxproj.filters b/L2BotCore/L2BotCore.vcxproj.filters index 1bc5ee5..2cb2dcc 100644 --- a/L2BotCore/L2BotCore.vcxproj.filters +++ b/L2BotCore/L2BotCore.vcxproj.filters @@ -90,9 +90,6 @@ Header Files - - Header Files - Header Files @@ -150,6 +147,9 @@ Header Files + + Header Files + diff --git a/L2BotDll/Services/WorldHandler.h b/L2BotDll/Services/WorldHandler.h index 1a4e6c1..be8e8c0 100644 --- a/L2BotDll/Services/WorldHandler.h +++ b/L2BotDll/Services/WorldHandler.h @@ -6,10 +6,10 @@ #include #include "Domain/Services/EntityService.h" #include "Domain/Services/ChatMessageService.h" -#include "Domain/Serializers/SerializableStateContainer.h" #include "Domain/Serializers/SerializerInterface.h" #include "Domain/Repositories/EntityRepositoryInterface.h" #include "Domain/Transports/TransportInterface.h" +#include "Domain/DTO/Message.h" using namespace L2Bot::Domain; @@ -83,7 +83,7 @@ private: for (const auto& item : data) { m_Transport.Send( - m_Serializer.Serialize({ item }) + m_Serializer.Serialize(item) ); } } @@ -120,33 +120,38 @@ private: } } - const std::vector GetData() + const std::vector> GetData() { - std::vector items + std::map services { - Serializers::SerializableStateContainer{m_HeroService.GetEntities(), L"hero"}, - Serializers::SerializableStateContainer{m_DropService.GetEntities(), L"drop"}, - Serializers::SerializableStateContainer{m_NPCService.GetEntities(), L"npc"}, - Serializers::SerializableStateContainer{m_PlayerService.GetEntities(), L"player"}, - Serializers::SerializableStateContainer{m_SkillService.GetEntities(), L"skill"}, - Serializers::SerializableStateContainer{m_ItemService.GetEntities(), L"item"}, - Serializers::SerializableStateContainer{m_AbnormalEffectService.GetEntities(), L"abnormalEffect"}, + {L"hero", m_HeroService}, + {L"drop", m_DropService}, + {L"npc", m_NPCService}, + {L"player", m_PlayerService}, + {L"skill", m_SkillService}, + {L"item", m_ItemService}, + {L"abnormalEffect", m_AbnormalEffectService} }; - std::vector result; - for (const auto& item : items) + std::vector> result; + + for (auto& kvp : services) { - for (const auto node : item.BuildSerializationNodes()) + for (const auto& entity : kvp.second.GetEntities()) { - result.push_back(node); - } + if (entity->GetState() != Enums::EntityStateEnum::none) + { + const auto message = DTO::Message{ kvp.first, entity->GetState(), *entity->GetEntity().get() }; + result.push_back(message.BuildSerializationNodes()); + } + }; } - - for (const auto& message : m_ChatMessageService.GetMessages()) + for (const auto& chatMessage : m_ChatMessageService.GetMessages()) { - result.push_back(Serializers::Node{ L"chat", message.BuildSerializationNodes() }); + const auto message = DTO::Message{ L"chat", Enums::EntityStateEnum::created, chatMessage }; + result.push_back(message.BuildSerializationNodes()); } - + return result; }