feat: change message api to one interface
This commit is contained in:
52
L2BotCore/Domain/DTO/Message.h
Normal file
52
L2BotCore/Domain/DTO/Message.h
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
#pragma once
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <memory>
|
||||||
|
#include "../Entities/EntityInterface.h"
|
||||||
|
#include "../Enums/EntityStateEnum.h"
|
||||||
|
|
||||||
|
namespace L2Bot::Domain::DTO
|
||||||
|
{
|
||||||
|
class Message : public Serializers::Serializable
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
const std::vector<Serializers::Node> 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;
|
||||||
|
};
|
||||||
|
}
|
@@ -1,56 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
#include <vector>
|
|
||||||
#include "../DTO/EntityState.h"
|
|
||||||
#include "Serializable.h"
|
|
||||||
|
|
||||||
namespace L2Bot::Domain::Serializers
|
|
||||||
{
|
|
||||||
class SerializableStateContainer : public Serializers::Serializable
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
const std::vector<Serializers::Node> BuildSerializationNodes() const override
|
|
||||||
{
|
|
||||||
std::vector<Serializers::Node> 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<Serializers::Node>{ { operationName, kvp->GetEntity()->BuildSerializationNodes() } }
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
SerializableStateContainer(const std::vector<std::shared_ptr<DTO::EntityState>> objects, const std::wstring& containerName) :
|
|
||||||
m_Objects(objects), m_ContainerName(containerName)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
SerializableStateContainer() = delete;
|
|
||||||
virtual ~SerializableStateContainer() = default;
|
|
||||||
private:
|
|
||||||
const std::vector<std::shared_ptr<DTO::EntityState>> m_Objects;
|
|
||||||
const std::wstring m_ContainerName;
|
|
||||||
};
|
|
||||||
}
|
|
@@ -160,6 +160,7 @@
|
|||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="Domain\DTO\EntityState.h" />
|
<ClInclude Include="Domain\DTO\EntityState.h" />
|
||||||
|
<ClInclude Include="Domain\DTO\Message.h" />
|
||||||
<ClInclude Include="Domain\Entities\AbnormalEffect.h" />
|
<ClInclude Include="Domain\Entities\AbnormalEffect.h" />
|
||||||
<ClInclude Include="Domain\Entities\ArmorItem.h" />
|
<ClInclude Include="Domain\Entities\ArmorItem.h" />
|
||||||
<ClInclude Include="Domain\Entities\EntityInterface.h" />
|
<ClInclude Include="Domain\Entities\EntityInterface.h" />
|
||||||
@@ -195,7 +196,6 @@
|
|||||||
<ClInclude Include="Domain\ValueObjects\ExperienceInfo.h" />
|
<ClInclude Include="Domain\ValueObjects\ExperienceInfo.h" />
|
||||||
<ClInclude Include="Domain\ValueObjects\FullName.h" />
|
<ClInclude Include="Domain\ValueObjects\FullName.h" />
|
||||||
<ClInclude Include="Domain\ValueObjects\InventoryInfo.h" />
|
<ClInclude Include="Domain\ValueObjects\InventoryInfo.h" />
|
||||||
<ClInclude Include="Domain\Serializers\SerializableStateContainer.h" />
|
|
||||||
<ClInclude Include="Domain\ValueObjects\PermanentStats.h" />
|
<ClInclude Include="Domain\ValueObjects\PermanentStats.h" />
|
||||||
<ClInclude Include="Domain\ValueObjects\Phenotype.h" />
|
<ClInclude Include="Domain\ValueObjects\Phenotype.h" />
|
||||||
<ClInclude Include="Domain\ValueObjects\Reputation.h" />
|
<ClInclude Include="Domain\ValueObjects\Reputation.h" />
|
||||||
|
@@ -90,9 +90,6 @@
|
|||||||
<ClInclude Include="Domain\Serializers\Node.h">
|
<ClInclude Include="Domain\Serializers\Node.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="Domain\Serializers\SerializableStateContainer.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="Domain\Transports\TransportInterface.h">
|
<ClInclude Include="Domain\Transports\TransportInterface.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
@@ -150,6 +147,9 @@
|
|||||||
<ClInclude Include="Domain\Repositories\ChatMessageRepositoryInterface.h">
|
<ClInclude Include="Domain\Repositories\ChatMessageRepositoryInterface.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="Domain\DTO\Message.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="pch.cpp">
|
<ClCompile Include="pch.cpp">
|
||||||
|
@@ -6,10 +6,10 @@
|
|||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
#include "Domain/Services/EntityService.h"
|
#include "Domain/Services/EntityService.h"
|
||||||
#include "Domain/Services/ChatMessageService.h"
|
#include "Domain/Services/ChatMessageService.h"
|
||||||
#include "Domain/Serializers/SerializableStateContainer.h"
|
|
||||||
#include "Domain/Serializers/SerializerInterface.h"
|
#include "Domain/Serializers/SerializerInterface.h"
|
||||||
#include "Domain/Repositories/EntityRepositoryInterface.h"
|
#include "Domain/Repositories/EntityRepositoryInterface.h"
|
||||||
#include "Domain/Transports/TransportInterface.h"
|
#include "Domain/Transports/TransportInterface.h"
|
||||||
|
#include "Domain/DTO/Message.h"
|
||||||
|
|
||||||
using namespace L2Bot::Domain;
|
using namespace L2Bot::Domain;
|
||||||
|
|
||||||
@@ -83,7 +83,7 @@ private:
|
|||||||
for (const auto& item : data)
|
for (const auto& item : data)
|
||||||
{
|
{
|
||||||
m_Transport.Send(
|
m_Transport.Send(
|
||||||
m_Serializer.Serialize({ item })
|
m_Serializer.Serialize(item)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -120,33 +120,38 @@ private:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::vector<Serializers::Node> GetData()
|
const std::vector<std::vector<Serializers::Node>> GetData()
|
||||||
{
|
{
|
||||||
std::vector<Serializers::SerializableStateContainer> items
|
std::map<std::wstring, Services::EntityService> services
|
||||||
{
|
{
|
||||||
Serializers::SerializableStateContainer{m_HeroService.GetEntities(), L"hero"},
|
{L"hero", m_HeroService},
|
||||||
Serializers::SerializableStateContainer{m_DropService.GetEntities(), L"drop"},
|
{L"drop", m_DropService},
|
||||||
Serializers::SerializableStateContainer{m_NPCService.GetEntities(), L"npc"},
|
{L"npc", m_NPCService},
|
||||||
Serializers::SerializableStateContainer{m_PlayerService.GetEntities(), L"player"},
|
{L"player", m_PlayerService},
|
||||||
Serializers::SerializableStateContainer{m_SkillService.GetEntities(), L"skill"},
|
{L"skill", m_SkillService},
|
||||||
Serializers::SerializableStateContainer{m_ItemService.GetEntities(), L"item"},
|
{L"item", m_ItemService},
|
||||||
Serializers::SerializableStateContainer{m_AbnormalEffectService.GetEntities(), L"abnormalEffect"},
|
{L"abnormalEffect", m_AbnormalEffectService}
|
||||||
};
|
};
|
||||||
|
|
||||||
std::vector<Serializers::Node> result;
|
std::vector<std::vector<Serializers::Node>> result;
|
||||||
for (const auto& item : items)
|
|
||||||
|
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& chatMessage : m_ChatMessageService.GetMessages())
|
||||||
for (const auto& message : 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;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user