From 2d35fd6c8b736fc8a0ef9ed9a03f62dbeeb9bfdc Mon Sep 17 00:00:00 2001 From: bumpsoo Date: Thu, 5 Feb 2026 13:47:39 +0000 Subject: [PATCH] =?UTF-8?q?refactor:=20=EB=B3=B5=EC=82=AC=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=ED=95=A8=EC=88=98=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/Session.h | 14 +++++++++++ server/PacketHandler.cpp | 53 ++++------------------------------------ server/Session.cpp | 10 ++++++++ 3 files changed, 29 insertions(+), 48 deletions(-) diff --git a/include/Session.h b/include/Session.h index b360056..9a25f19 100644 --- a/include/Session.h +++ b/include/Session.h @@ -16,6 +16,20 @@ public: void Start(); void Send(std::span data); + template void SendPacket(PacketID id, const T &payload) { + PacketHeader header; + header.id = static_cast(id); + header.size = sizeof(T); + + std::vector buffer(sizeof(PacketHeader) + sizeof(T)); + std::memcpy(buffer.data(), &header, sizeof(PacketHeader)); + std::memcpy(buffer.data() + sizeof(PacketHeader), &payload, sizeof(T)); + + Send(buffer); + } + + void SendPacket(PacketID id); + void SetNickname(const std::string &nickname); const std::string &GetNickname() const; diff --git a/server/PacketHandler.cpp b/server/PacketHandler.cpp index b4a3dd0..c294e33 100644 --- a/server/PacketHandler.cpp +++ b/server/PacketHandler.cpp @@ -13,9 +13,7 @@ PacketHandler::HandlePacket(std::shared_ptr session, switch (static_cast(packet.header.id)) { case PacketID::Ping: { Logger::Log("Ping 수신됨"); - session->Send(std::span( - reinterpret_cast(&packet.header), - sizeof(PacketHeader))); + session->SendPacket(PacketID::Ping); } break; case PacketID::CS_Login: { @@ -40,18 +38,7 @@ PacketHandler::HandlePacket(std::shared_ptr session, if (!SessionManager::GetInstance().TryJoin(session, userData.nickname)) { Logger::Log("중복 로그인 거부: ", nickname); loginResult.result = 0; - - PacketHeader header; - header.id = static_cast(PacketID::SC_LoginResult); - header.size = sizeof(PKT_SC_LoginResult); - - std::vector buffer(sizeof(PacketHeader) + - sizeof(PKT_SC_LoginResult)); - std::memcpy(buffer.data(), &header, sizeof(PacketHeader)); - std::memcpy(buffer.data() + sizeof(PacketHeader), &loginResult, - sizeof(PKT_SC_LoginResult)); - - session->Send(buffer); + session->SendPacket(PacketID::SC_LoginResult, loginResult); co_return; } @@ -60,18 +47,7 @@ PacketHandler::HandlePacket(std::shared_ptr session, ", Level: ", session->GetSwordLevel(), ")"); loginResult.result = 1; - - PacketHeader header; - header.id = static_cast(PacketID::SC_LoginResult); - header.size = sizeof(PKT_SC_LoginResult); - - std::vector buffer(sizeof(PacketHeader) + - sizeof(PKT_SC_LoginResult)); - std::memcpy(buffer.data(), &header, sizeof(PacketHeader)); - std::memcpy(buffer.data() + sizeof(PacketHeader), &loginResult, - sizeof(PKT_SC_LoginResult)); - - session->Send(buffer); + session->SendPacket(PacketID::SC_LoginResult, loginResult); } break; case PacketID::CS_UpgradeSword: { @@ -104,16 +80,7 @@ PacketHandler::HandlePacket(std::shared_ptr session, res.currentGold = session->GetGold(); // 결과 패킷 전송 - PacketHeader header; - header.id = static_cast(PacketID::SC_UpgradeResult); - header.size = sizeof(PKT_SC_UpgradeResult); - - std::vector buffer(sizeof(PacketHeader) + - sizeof(PKT_SC_UpgradeResult)); - std::memcpy(buffer.data(), &header, sizeof(PacketHeader)); - std::memcpy(buffer.data() + sizeof(PacketHeader), &res, - sizeof(PKT_SC_UpgradeResult)); - session->Send(buffer); + session->SendPacket(PacketID::SC_UpgradeResult, res); // 브로드캐스트 if (currentGold >= cost) { @@ -158,17 +125,7 @@ PacketHandler::HandlePacket(std::shared_ptr session, res.earnedGold = price; res.totalGold = newGold; - PacketHeader header; - header.id = static_cast(PacketID::SC_SellResult); - header.size = sizeof(PKT_SC_SellResult); - - std::vector buffer(sizeof(PacketHeader) + - sizeof(PKT_SC_SellResult)); - std::memcpy(buffer.data(), &header, sizeof(PacketHeader)); - std::memcpy(buffer.data() + sizeof(PacketHeader), &res, - sizeof(PKT_SC_SellResult)); - - session->Send(buffer); + session->SendPacket(PacketID::SC_SellResult, res); Logger::Log("검 판매 [", session->GetNickname(), "]: ", price, " 골드 획득"); diff --git a/server/Session.cpp b/server/Session.cpp index eaf67b3..7e1f091 100644 --- a/server/Session.cpp +++ b/server/Session.cpp @@ -3,6 +3,7 @@ #include "SessionManager.h" #include #include +#include Session::Session(tcp::socket socket) : socket_(std::move(socket)) {} @@ -21,6 +22,15 @@ uint32_t Session::GetSwordLevel() const { return swordLevel_; } void Session::Start() { DoReadHeader(); } +void Session::SendPacket(PacketID id) { + PacketHeader header; + header.id = static_cast(id); + header.size = 0; + std::vector buffer(sizeof(PacketHeader)); + std::memcpy(buffer.data(), &header, sizeof(PacketHeader)); + Send(buffer); +} + void Session::Send(std::span data) { auto self(shared_from_this()); boost::asio::post(