tmp
This commit is contained in:
parent
a88b22b177
commit
263bb3e3af
10 changed files with 374 additions and 117 deletions
|
|
@ -1,6 +1,7 @@
|
|||
#include "PacketHandler.h"
|
||||
#include "DatabaseManager.h"
|
||||
#include "Logger.h"
|
||||
#include "Protocol.pb.h"
|
||||
#include "SessionManager.h"
|
||||
#include "SwordLogic.h"
|
||||
#include <boost/asio/use_awaitable.hpp>
|
||||
|
|
@ -17,27 +18,25 @@ PacketHandler::HandlePacket(std::shared_ptr<Session> session,
|
|||
} break;
|
||||
|
||||
case PacketID::CS_Login: {
|
||||
if (packet.payload.size() < sizeof(PKT_CS_Login)) {
|
||||
Logger::Log("로그인 패킷 크기가 올바르지 않습니다.");
|
||||
Protocol::CS_Login pkt;
|
||||
if (!pkt.ParseFromArray(packet.payload.data(), packet.payload.size())) {
|
||||
Logger::Log("로그인 패킷 파싱 실패");
|
||||
co_return;
|
||||
}
|
||||
|
||||
const PKT_CS_Login *loginPkt =
|
||||
reinterpret_cast<const PKT_CS_Login *>(packet.payload.data());
|
||||
std::string nickname(loginPkt->nickname);
|
||||
|
||||
std::string nickname = pkt.nickname();
|
||||
auto userData = co_await DatabaseManager::GetInstance().LoadUser(nickname);
|
||||
|
||||
// 골드와 검 레벨 설정 (닉네임은 TryJoin에서 설정)
|
||||
session->SetGold(userData.gold);
|
||||
session->SetSwordLevel(userData.swordLevel);
|
||||
|
||||
PKT_SC_LoginResult loginResult;
|
||||
Protocol::SC_LoginResult loginResult;
|
||||
|
||||
// 중복 체크
|
||||
if (!SessionManager::GetInstance().TryJoin(session, userData.nickname)) {
|
||||
Logger::Log("중복 로그인 거부: ", nickname);
|
||||
loginResult.result = 0;
|
||||
loginResult.set_success(false);
|
||||
session->SendPacket(PacketID::SC_LoginResult, loginResult);
|
||||
co_return;
|
||||
}
|
||||
|
|
@ -46,7 +45,7 @@ PacketHandler::HandlePacket(std::shared_ptr<Session> session,
|
|||
" (Gold: ", session->GetGold(),
|
||||
", Level: ", session->GetSwordLevel(), ")");
|
||||
|
||||
loginResult.result = 1;
|
||||
loginResult.set_success(true);
|
||||
session->SendPacket(PacketID::SC_LoginResult, loginResult);
|
||||
} break;
|
||||
|
||||
|
|
@ -55,14 +54,14 @@ PacketHandler::HandlePacket(std::shared_ptr<Session> session,
|
|||
uint64_t cost = SwordLogic::GetUpgradeCost(currentLevel);
|
||||
uint64_t currentGold = session->GetGold();
|
||||
|
||||
PKT_SC_UpgradeResult res;
|
||||
Protocol::SC_UpgradeResult res;
|
||||
if (currentGold < cost) {
|
||||
// 골드 부족
|
||||
res.result = 2;
|
||||
res.set_result(2);
|
||||
} else {
|
||||
session->SetGold(currentGold - cost);
|
||||
uint8_t result = SwordLogic::TryUpgrade(currentLevel);
|
||||
res.result = result;
|
||||
res.set_result(result);
|
||||
|
||||
// 성공
|
||||
if (result == 1) {
|
||||
|
|
@ -76,8 +75,8 @@ PacketHandler::HandlePacket(std::shared_ptr<Session> session,
|
|||
session->GetNickname(), session->GetGold(), session->GetSwordLevel());
|
||||
}
|
||||
|
||||
res.currentLevel = session->GetSwordLevel();
|
||||
res.currentGold = session->GetGold();
|
||||
res.set_current_level(session->GetSwordLevel());
|
||||
res.set_current_gold(session->GetGold());
|
||||
|
||||
// 결과 패킷 전송
|
||||
session->SendPacket(PacketID::SC_UpgradeResult, res);
|
||||
|
|
@ -86,9 +85,9 @@ PacketHandler::HandlePacket(std::shared_ptr<Session> session,
|
|||
if (currentGold >= cost) {
|
||||
uint32_t attemptedLevel = currentLevel + 1;
|
||||
std::string resultText;
|
||||
if (res.result == 1) {
|
||||
if (res.result() == 1) {
|
||||
resultText = "를 달성했습니다!";
|
||||
} else if (res.result == 0) {
|
||||
} else if (res.result() == 0) {
|
||||
resultText = " 시도 중 검이 파괴되었습니다!";
|
||||
} else {
|
||||
resultText = " 달성에 실패했습니다!";
|
||||
|
|
@ -105,8 +104,9 @@ PacketHandler::HandlePacket(std::shared_ptr<Session> session,
|
|||
std::vector<uint8_t> chatPayload(chatMsg.begin(), chatMsg.end());
|
||||
SessionManager::GetInstance().Broadcast(chatHeader, chatPayload);
|
||||
|
||||
Logger::Log("강화 시도 [", session->GetNickname(), "]: ", (int)res.result,
|
||||
" (레벨: ", currentLevel, "->", res.currentLevel, ")");
|
||||
Logger::Log("강화 시도 [", session->GetNickname(),
|
||||
"]: ", (int)res.result(), " (레벨: ", currentLevel, "->",
|
||||
res.current_level(), ")");
|
||||
}
|
||||
} break;
|
||||
|
||||
|
|
@ -121,9 +121,9 @@ PacketHandler::HandlePacket(std::shared_ptr<Session> session,
|
|||
co_await DatabaseManager::GetInstance().SaveUser(
|
||||
session->GetNickname(), session->GetGold(), session->GetSwordLevel());
|
||||
|
||||
PKT_SC_SellResult res;
|
||||
res.earnedGold = price;
|
||||
res.totalGold = newGold;
|
||||
Protocol::SC_SellResult res;
|
||||
res.set_earned_gold(price);
|
||||
res.set_total_gold(newGold);
|
||||
|
||||
session->SendPacket(PacketID::SC_SellResult, res);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue