aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGosha <284210+Lordron@users.noreply.github.com>2022-10-11 23:18:54 +0300
committerShauren <shauren.trinity@gmail.com>2022-10-13 12:37:18 +0200
commitc1a9d7a3bc174ca27fbca71d1328dac60380e33b (patch)
tree7dbf87b85a71fbda4a242fd0b7f7dd990b1ceb53 /src
parent76631d0950d95c66586450a2d934c5101fba80e3 (diff)
Core/PacketIO: Use ByteBuffer from UpdateData instead of copying to it after (#28347)
(cherry picked from commit 81bf8de9895e050d5800a8a37316c0e6874b5e40)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.cpp4
-rw-r--r--src/server/game/Entities/Conversation/Conversation.cpp4
-rw-r--r--src/server/game/Entities/Corpse/Corpse.cpp4
-rw-r--r--src/server/game/Entities/DynamicObject/DynamicObject.cpp4
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp4
-rw-r--r--src/server/game/Entities/Item/AzeriteItem/AzeriteEmpoweredItem.cpp4
-rw-r--r--src/server/game/Entities/Item/AzeriteItem/AzeriteItem.cpp4
-rw-r--r--src/server/game/Entities/Item/Container/Bag.cpp4
-rw-r--r--src/server/game/Entities/Item/Item.cpp4
-rw-r--r--src/server/game/Entities/Object/Object.cpp16
-rw-r--r--src/server/game/Entities/Object/Object.h2
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateData.cpp6
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateData.h3
-rw-r--r--src/server/game/Entities/Player/Player.cpp4
-rw-r--r--src/server/game/Entities/SceneObject/SceneObject.cpp4
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp4
16 files changed, 35 insertions, 40 deletions
diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
index 6d01620661a..1abd77ffb7c 100644
--- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
+++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
@@ -1040,7 +1040,7 @@ void AreaTrigger::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::Objec
if (requestedAreaTriggerMask.IsAnySet())
valuesMask.Set(TYPEID_AREATRIGGER);
- ByteBuffer buffer = PrepareValuesUpdateBuffer();
+ ByteBuffer& buffer = PrepareValuesUpdateBuffer(data);
std::size_t sizePos = buffer.wpos();
buffer << uint32(0);
buffer << uint32(valuesMask.GetBlock(0));
@@ -1053,7 +1053,7 @@ void AreaTrigger::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::Objec
buffer.put<uint32>(sizePos, buffer.wpos() - sizePos - 4);
- data->AddUpdateBlock(buffer);
+ data->AddUpdateBlock();
}
void AreaTrigger::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const
diff --git a/src/server/game/Entities/Conversation/Conversation.cpp b/src/server/game/Entities/Conversation/Conversation.cpp
index a7259107561..5d37078b576 100644
--- a/src/server/game/Entities/Conversation/Conversation.cpp
+++ b/src/server/game/Entities/Conversation/Conversation.cpp
@@ -315,7 +315,7 @@ void Conversation::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::Obje
if (requestedConversationMask.IsAnySet())
valuesMask.Set(TYPEID_CONVERSATION);
- ByteBuffer buffer = PrepareValuesUpdateBuffer();
+ ByteBuffer& buffer = PrepareValuesUpdateBuffer(data);
std::size_t sizePos = buffer.wpos();
buffer << uint32(0);
buffer << uint32(valuesMask.GetBlock(0));
@@ -328,7 +328,7 @@ void Conversation::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::Obje
buffer.put<uint32>(sizePos, buffer.wpos() - sizePos - 4);
- data->AddUpdateBlock(buffer);
+ data->AddUpdateBlock();
}
void Conversation::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const
diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp
index 37d36295a54..518cad8b3a1 100644
--- a/src/server/game/Entities/Corpse/Corpse.cpp
+++ b/src/server/game/Entities/Corpse/Corpse.cpp
@@ -275,7 +275,7 @@ void Corpse::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData
if (requestedCorpseMask.IsAnySet())
valuesMask.Set(TYPEID_CORPSE);
- ByteBuffer buffer = PrepareValuesUpdateBuffer();
+ ByteBuffer& buffer = PrepareValuesUpdateBuffer(data);
std::size_t sizePos = buffer.wpos();
buffer << uint32(0);
buffer << uint32(valuesMask.GetBlock(0));
@@ -288,7 +288,7 @@ void Corpse::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData
buffer.put<uint32>(sizePos, buffer.wpos() - sizePos - 4);
- data->AddUpdateBlock(buffer);
+ data->AddUpdateBlock();
}
void Corpse::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const
diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.cpp b/src/server/game/Entities/DynamicObject/DynamicObject.cpp
index 9aeada30f46..c7edc1cee09 100644
--- a/src/server/game/Entities/DynamicObject/DynamicObject.cpp
+++ b/src/server/game/Entities/DynamicObject/DynamicObject.cpp
@@ -289,7 +289,7 @@ void DynamicObject::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::Obj
if (requestedDynamicObjectMask.IsAnySet())
valuesMask.Set(TYPEID_DYNAMICOBJECT);
- ByteBuffer buffer = PrepareValuesUpdateBuffer();
+ ByteBuffer& buffer = PrepareValuesUpdateBuffer(data);
std::size_t sizePos = buffer.wpos();
buffer << uint32(0);
buffer << uint32(valuesMask.GetBlock(0));
@@ -302,7 +302,7 @@ void DynamicObject::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::Obj
buffer.put<uint32>(sizePos, buffer.wpos() - sizePos - 4);
- data->AddUpdateBlock(buffer);
+ data->AddUpdateBlock();
}
void DynamicObject::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 7bbf6cccf76..f31e372fe0b 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -3299,7 +3299,7 @@ void GameObject::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::Object
if (requestedGameObjectMask.IsAnySet())
valuesMask.Set(TYPEID_GAMEOBJECT);
- ByteBuffer buffer = PrepareValuesUpdateBuffer();
+ ByteBuffer& buffer = PrepareValuesUpdateBuffer(data);
std::size_t sizePos = buffer.wpos();
buffer << uint32(0);
buffer << uint32(valuesMask.GetBlock(0));
@@ -3312,7 +3312,7 @@ void GameObject::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::Object
buffer.put<uint32>(sizePos, buffer.wpos() - sizePos - 4);
- data->AddUpdateBlock(buffer);
+ data->AddUpdateBlock();
}
void GameObject::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const
diff --git a/src/server/game/Entities/Item/AzeriteItem/AzeriteEmpoweredItem.cpp b/src/server/game/Entities/Item/AzeriteItem/AzeriteEmpoweredItem.cpp
index 7ec63620a4f..552e5075603 100644
--- a/src/server/game/Entities/Item/AzeriteItem/AzeriteEmpoweredItem.cpp
+++ b/src/server/game/Entities/Item/AzeriteItem/AzeriteEmpoweredItem.cpp
@@ -201,7 +201,7 @@ void AzeriteEmpoweredItem::BuildValuesUpdateForPlayerWithMask(UpdateData* data,
if (requestedAzeriteEmpoweredItemMask.IsAnySet())
valuesMask.Set(TYPEID_AZERITE_EMPOWERED_ITEM);
- ByteBuffer buffer = PrepareValuesUpdateBuffer();
+ ByteBuffer& buffer = PrepareValuesUpdateBuffer(data);
std::size_t sizePos = buffer.wpos();
buffer << uint32(0);
buffer << uint32(valuesMask.GetBlock(0));
@@ -217,7 +217,7 @@ void AzeriteEmpoweredItem::BuildValuesUpdateForPlayerWithMask(UpdateData* data,
buffer.put<uint32>(sizePos, buffer.wpos() - sizePos - 4);
- data->AddUpdateBlock(buffer);
+ data->AddUpdateBlock();
}
void AzeriteEmpoweredItem::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const
diff --git a/src/server/game/Entities/Item/AzeriteItem/AzeriteItem.cpp b/src/server/game/Entities/Item/AzeriteItem/AzeriteItem.cpp
index ae86e0ab97e..95f14602f25 100644
--- a/src/server/game/Entities/Item/AzeriteItem/AzeriteItem.cpp
+++ b/src/server/game/Entities/Item/AzeriteItem/AzeriteItem.cpp
@@ -462,7 +462,7 @@ void AzeriteItem::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::Objec
if (azeriteItemMask.IsAnySet())
valuesMask.Set(TYPEID_AZERITE_ITEM);
- ByteBuffer buffer = PrepareValuesUpdateBuffer();
+ ByteBuffer& buffer = PrepareValuesUpdateBuffer(data);
std::size_t sizePos = buffer.wpos();
buffer << uint32(0);
buffer << uint32(valuesMask.GetBlock(0));
@@ -478,7 +478,7 @@ void AzeriteItem::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::Objec
buffer.put<uint32>(sizePos, buffer.wpos() - sizePos - 4);
- data->AddUpdateBlock(buffer);
+ data->AddUpdateBlock();
}
void AzeriteItem::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const
diff --git a/src/server/game/Entities/Item/Container/Bag.cpp b/src/server/game/Entities/Item/Container/Bag.cpp
index 53bd7b5d39f..b9c7855cc38 100644
--- a/src/server/game/Entities/Item/Container/Bag.cpp
+++ b/src/server/game/Entities/Item/Container/Bag.cpp
@@ -229,7 +229,7 @@ void Bag::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::M
if (requestedContainerMask.IsAnySet())
valuesMask.Set(TYPEID_CONTAINER);
- ByteBuffer buffer = PrepareValuesUpdateBuffer();
+ ByteBuffer& buffer = PrepareValuesUpdateBuffer(data);
std::size_t sizePos = buffer.wpos();
buffer << uint32(0);
buffer << uint32(valuesMask.GetBlock(0));
@@ -245,7 +245,7 @@ void Bag::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::M
buffer.put<uint32>(sizePos, buffer.wpos() - sizePos - 4);
- data->AddUpdateBlock(buffer);
+ data->AddUpdateBlock();
}
void Bag::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index 464706d5538..96399f9c00f 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -1748,7 +1748,7 @@ void Item::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::
if (itemMask.IsAnySet())
valuesMask.Set(TYPEID_ITEM);
- ByteBuffer buffer = PrepareValuesUpdateBuffer();
+ ByteBuffer& buffer = PrepareValuesUpdateBuffer(data);
std::size_t sizePos = buffer.wpos();
buffer << uint32(0);
buffer << uint32(valuesMask.GetBlock(0));
@@ -1761,7 +1761,7 @@ void Item::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::
buffer.put<uint32>(sizePos, buffer.wpos() - sizePos - 4);
- data->AddUpdateBlock(buffer);
+ data->AddUpdateBlock();
}
void Item::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index bbaf33cd2b0..451ed8cf0dc 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -178,14 +178,14 @@ void Object::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) c
flags.CombatVictim = true;
}
- ByteBuffer buf(0x400, ByteBuffer::Reserve{});
+ ByteBuffer& buf = data->GetBuffer();
buf << uint8(updateType);
buf << GetGUID();
buf << uint8(objectType);
BuildMovementUpdate(&buf, flags, target);
BuildValuesCreate(&buf, target);
- data->AddUpdateBlock(buf);
+ data->AddUpdateBlock();
}
void Object::SendUpdateToPlayer(Player* player)
@@ -204,20 +204,20 @@ void Object::SendUpdateToPlayer(Player* player)
void Object::BuildValuesUpdateBlockForPlayer(UpdateData* data, Player const* target) const
{
- ByteBuffer buf = PrepareValuesUpdateBuffer();
+ ByteBuffer& buf = PrepareValuesUpdateBuffer(data);
BuildValuesUpdate(&buf, target);
- data->AddUpdateBlock(buf);
+ data->AddUpdateBlock();
}
void Object::BuildValuesUpdateBlockForPlayerWithFlag(UpdateData* data, UF::UpdateFieldFlag flags, Player const* target) const
{
- ByteBuffer buf = PrepareValuesUpdateBuffer();
+ ByteBuffer& buf = PrepareValuesUpdateBuffer(data);
BuildValuesUpdateWithFlag(&buf, flags, target);
- data->AddUpdateBlock(buf);
+ data->AddUpdateBlock();
}
void Object::BuildDestroyUpdateBlock(UpdateData* data) const
@@ -230,9 +230,9 @@ void Object::BuildOutOfRangeUpdateBlock(UpdateData* data) const
data->AddOutOfRangeGUID(GetGUID());
}
-ByteBuffer Object::PrepareValuesUpdateBuffer() const
+ByteBuffer& Object::PrepareValuesUpdateBuffer(UpdateData* data) const
{
- ByteBuffer buffer(500, ByteBuffer::Reserve{});
+ ByteBuffer& buffer = data->GetBuffer();
buffer << uint8(UPDATETYPE_VALUES);
buffer << GetGUID();
return buffer;
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index 0d19519de23..550b8e5588b 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -178,7 +178,7 @@ class TC_GAME_API Object
void BuildValuesUpdateBlockForPlayerWithFlag(UpdateData* data, UF::UpdateFieldFlag flags, Player const* target) const;
void BuildDestroyUpdateBlock(UpdateData* data) const;
void BuildOutOfRangeUpdateBlock(UpdateData* data) const;
- ByteBuffer PrepareValuesUpdateBuffer() const;
+ ByteBuffer& PrepareValuesUpdateBuffer(UpdateData* data) const;
virtual void DestroyForPlayer(Player* target) const;
void SendOutOfRangeForPlayer(Player* target) const;
diff --git a/src/server/game/Entities/Object/Updates/UpdateData.cpp b/src/server/game/Entities/Object/Updates/UpdateData.cpp
index e437c28e064..44104a2dcb7 100644
--- a/src/server/game/Entities/Object/Updates/UpdateData.cpp
+++ b/src/server/game/Entities/Object/Updates/UpdateData.cpp
@@ -37,12 +37,6 @@ void UpdateData::AddOutOfRangeGUID(ObjectGuid guid)
m_outOfRangeGUIDs.insert(guid);
}
-void UpdateData::AddUpdateBlock(ByteBuffer const& block)
-{
- m_data.append(block);
- ++m_blockCount;
-}
-
bool UpdateData::BuildPacket(WorldPacket* packet)
{
ASSERT(packet->empty()); // shouldn't happen
diff --git a/src/server/game/Entities/Object/Updates/UpdateData.h b/src/server/game/Entities/Object/Updates/UpdateData.h
index 08cfa498f18..910282435dd 100644
--- a/src/server/game/Entities/Object/Updates/UpdateData.h
+++ b/src/server/game/Entities/Object/Updates/UpdateData.h
@@ -46,7 +46,8 @@ class UpdateData
void AddDestroyObject(ObjectGuid guid);
void AddOutOfRangeGUID(GuidSet& guids);
void AddOutOfRangeGUID(ObjectGuid guid);
- void AddUpdateBlock(ByteBuffer const& block);
+ void AddUpdateBlock() { ++m_blockCount; }
+ ByteBuffer& GetBuffer() { return m_data; }
bool BuildPacket(WorldPacket* packet);
bool HasData() const { return m_blockCount > 0 || !m_outOfRangeGUIDs.empty() || !m_destroyGUIDs.empty(); }
void Clear();
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 037ae501aae..1e70772d262 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -3640,7 +3640,7 @@ void Player::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData
if (target == this && requestedActivePlayerMask.IsAnySet())
valuesMask.Set(TYPEID_ACTIVE_PLAYER);
- ByteBuffer buffer = PrepareValuesUpdateBuffer();
+ ByteBuffer& buffer = PrepareValuesUpdateBuffer(data);
std::size_t sizePos = buffer.wpos();
buffer << uint32(0);
buffer << uint32(valuesMask.GetBlock(0));
@@ -3659,7 +3659,7 @@ void Player::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData
buffer.put<uint32>(sizePos, buffer.wpos() - sizePos - 4);
- data->AddUpdateBlock(buffer);
+ data->AddUpdateBlock();
}
void Player::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const
diff --git a/src/server/game/Entities/SceneObject/SceneObject.cpp b/src/server/game/Entities/SceneObject/SceneObject.cpp
index 73f9bf22b88..fb2942e44dc 100644
--- a/src/server/game/Entities/SceneObject/SceneObject.cpp
+++ b/src/server/game/Entities/SceneObject/SceneObject.cpp
@@ -173,7 +173,7 @@ void SceneObject::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::Objec
if (requestedSceneObjectMask.IsAnySet())
valuesMask.Set(TYPEID_SCENEOBJECT);
- ByteBuffer buffer = PrepareValuesUpdateBuffer();
+ ByteBuffer& buffer = PrepareValuesUpdateBuffer(data);
std::size_t sizePos = buffer.wpos();
buffer << uint32(0);
buffer << uint32(valuesMask.GetBlock(0));
@@ -186,7 +186,7 @@ void SceneObject::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::Objec
buffer.put<uint32>(sizePos, buffer.wpos() - sizePos - 4);
- data->AddUpdateBlock(buffer);
+ data->AddUpdateBlock();
}
void SceneObject::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 13f75a7a6ed..e029077780b 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -13241,7 +13241,7 @@ void Unit::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::
if (unitMask.IsAnySet())
valuesMask.Set(TYPEID_UNIT);
- ByteBuffer buffer = PrepareValuesUpdateBuffer();
+ ByteBuffer& buffer = PrepareValuesUpdateBuffer(data);
std::size_t sizePos = buffer.wpos();
buffer << uint32(0);
buffer << uint32(valuesMask.GetBlock(0));
@@ -13254,7 +13254,7 @@ void Unit::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::
buffer.put<uint32>(sizePos, buffer.wpos() - sizePos - 4);
- data->AddUpdateBlock(buffer);
+ data->AddUpdateBlock();
}
void Unit::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const