diff options
| author | Shauren <shauren.trinity@gmail.com> | 2014-07-27 17:46:46 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2014-07-27 17:46:46 +0200 |
| commit | 6f272ea5b7d6551844aa1a1f748cee5c79b746f3 (patch) | |
| tree | 82fd15487be93bad4a2674f10fc4cd0694bd9007 /src/server/game/Scripting | |
| parent | 8a05231994342bc826fa98f3f1df741cc14e19f7 (diff) | |
Core/Network: Optimized packet sending by removing unneccessary memory copying
Diffstat (limited to 'src/server/game/Scripting')
| -rw-r--r-- | src/server/game/Scripting/ScriptMgr.cpp | 24 | ||||
| -rw-r--r-- | src/server/game/Scripting/ScriptMgr.h | 6 |
2 files changed, 21 insertions, 9 deletions
diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 1b91ed1690c..0d1983ab463 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -414,25 +414,37 @@ void ScriptMgr::OnSocketClose(std::shared_ptr<WorldSocket> socket, bool wasNew) FOREACH_SCRIPT(ServerScript)->OnSocketClose(socket, wasNew); } -void ScriptMgr::OnPacketReceive(std::shared_ptr<WorldSocket> socket, WorldPacket packet) +void ScriptMgr::OnPacketReceive(std::shared_ptr<WorldSocket> socket, WorldPacket const& packet) { ASSERT(socket); - FOREACH_SCRIPT(ServerScript)->OnPacketReceive(socket, packet); + if (SCR_REG_LST(ServerScript).empty()) + return; + + WorldPacket copy(packet); + FOREACH_SCRIPT(ServerScript)->OnPacketReceive(socket, copy); } -void ScriptMgr::OnPacketSend(std::shared_ptr<WorldSocket> socket, WorldPacket packet) +void ScriptMgr::OnPacketSend(std::shared_ptr<WorldSocket> socket, WorldPacket const& packet) { ASSERT(socket); - FOREACH_SCRIPT(ServerScript)->OnPacketSend(socket, packet); + if (SCR_REG_LST(ServerScript).empty()) + return; + + WorldPacket copy(packet); + FOREACH_SCRIPT(ServerScript)->OnPacketSend(socket, copy); } -void ScriptMgr::OnUnknownPacketReceive(std::shared_ptr<WorldSocket> socket, WorldPacket packet) +void ScriptMgr::OnUnknownPacketReceive(std::shared_ptr<WorldSocket> socket, WorldPacket const& packet) { ASSERT(socket); - FOREACH_SCRIPT(ServerScript)->OnUnknownPacketReceive(socket, packet); + if (SCR_REG_LST(ServerScript).empty()) + return; + + WorldPacket copy(packet); + FOREACH_SCRIPT(ServerScript)->OnUnknownPacketReceive(socket, copy); } void ScriptMgr::OnOpenStateChange(bool open) diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 325a0743d79..0b5813a7f58 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -910,9 +910,9 @@ class ScriptMgr void OnNetworkStop(); void OnSocketOpen(std::shared_ptr<WorldSocket> socket); void OnSocketClose(std::shared_ptr<WorldSocket> socket, bool wasNew); - void OnPacketReceive(std::shared_ptr<WorldSocket> socket, WorldPacket packet); - void OnPacketSend(std::shared_ptr<WorldSocket> socket, WorldPacket packet); - void OnUnknownPacketReceive(std::shared_ptr<WorldSocket> socket, WorldPacket packet); + void OnPacketReceive(std::shared_ptr<WorldSocket> socket, WorldPacket const& packet); + void OnPacketSend(std::shared_ptr<WorldSocket> socket, WorldPacket const& packet); + void OnUnknownPacketReceive(std::shared_ptr<WorldSocket> socket, WorldPacket const& packet); public: /* WorldScript */ |
