feat: 중복 로그인 방지 코드 추가
This commit is contained in:
parent
1d103d7f16
commit
17013f70f5
6 changed files with 102 additions and 7 deletions
|
|
@ -30,14 +30,50 @@ PacketHandler::HandlePacket(std::shared_ptr<Session> session,
|
|||
|
||||
auto userData = co_await DatabaseManager::GetInstance().LoadUser(nickname);
|
||||
|
||||
session->SetNickname(userData.nickname);
|
||||
// 골드와 검 레벨 설정 (닉네임은 TryJoin에서 설정)
|
||||
session->SetGold(userData.gold);
|
||||
session->SetSwordLevel(userData.swordLevel);
|
||||
|
||||
Logger::Log("클라이언트 로그인: ", nickname, " (Gold: ", session->GetGold(),
|
||||
PKT_SC_LoginResult loginResult;
|
||||
|
||||
// 원자적으로 중복 체크 및 세션 추가
|
||||
if (!SessionManager::GetInstance().TryJoin(session, userData.nickname)) {
|
||||
// 이미 접속 중인 유저
|
||||
Logger::Log("중복 로그인 거부: ", nickname);
|
||||
loginResult.result = 0;
|
||||
|
||||
PacketHeader header;
|
||||
header.id = static_cast<uint16_t>(PacketID::SC_LoginResult);
|
||||
header.size = sizeof(PKT_SC_LoginResult);
|
||||
|
||||
std::vector<uint8_t> 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);
|
||||
co_return;
|
||||
}
|
||||
|
||||
Logger::Log("클라이언트 로그인 성공: ", nickname,
|
||||
" (Gold: ", session->GetGold(),
|
||||
", Level: ", session->GetSwordLevel(), ")");
|
||||
|
||||
SessionManager::GetInstance().Join(session);
|
||||
// 로그인 성공 응답
|
||||
loginResult.result = 1;
|
||||
|
||||
PacketHeader header;
|
||||
header.id = static_cast<uint16_t>(PacketID::SC_LoginResult);
|
||||
header.size = sizeof(PKT_SC_LoginResult);
|
||||
|
||||
std::vector<uint8_t> 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);
|
||||
} break;
|
||||
|
||||
case PacketID::CS_UpgradeSword: {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue