Files
Client/Server/RylServerProject/RylUIDServer/UserIDTable.cpp
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

106 lines
2.0 KiB
C++

#include "stdAfx.h"
#include <Log/ServerLog.h>
#include "UserIDTable.h"
CUserNode::CUserNode(unsigned long dwUserID, unsigned long dwSessionID,
unsigned long dwCharID, unsigned char cGroup, unsigned char cState)
: m_dwUserID(dwUserID), m_dwSessionID(dwSessionID),
m_dwCharID(dwCharID), m_cAgentGroup(cGroup), m_cState(cState)
{
}
CUserNode::~CUserNode()
{
}
void CUserNode::InitUserNode(unsigned long dwUserID, unsigned long dwSessionID,
unsigned long dwCharID, unsigned char cGroup, unsigned char cState)
{
m_cAgentGroup = cGroup;
m_cState = cState;
m_dwSessionID = dwSessionID;
m_dwUserID = dwUserID;
m_dwCharID = dwCharID;
}
CUserIDTable& CUserIDTable::GetInstance()
{
static CUserIDTable userIDTable;
return userIDTable;
}
CUserIDTable::CUserIDTable()
{
}
CUserIDTable::~CUserIDTable()
{
m_UIDTable.clear();
}
BOOL CUserIDTable::Insert(unsigned long dwUserID, const CUserNode& Node)
{
if(m_UIDTable.insert(std::make_pair(dwUserID, Node)).second)
{
return TRUE;
}
SERLOG1(g_Log, "유저(0x%08x)를 테이블에 넣는데 실패", dwUserID);
return FALSE;
}
BOOL CUserIDTable::Erase(unsigned long dwUserID)
{
UIDTable::iterator itr = m_UIDTable.find(dwUserID);
if(itr != m_UIDTable.end())
{
m_UIDTable.erase(itr);
return TRUE;
}
return FALSE;
}
CUserNode* CUserIDTable::Find(unsigned long dwUserID)
{
UIDTable::iterator itr = m_UIDTable.find(dwUserID);
return (itr != m_UIDTable.end()) ? (&itr->second) : 0;
}
int CUserIDTable::RemoveUserOfCurrentAgent(char Group)
{
int nNum = 0;
INFLOG1(g_Log, "그룹(%d)의 사용자 삭제 시작", Group);
UIDTable::iterator pos = m_UIDTable.begin();
UIDTable::iterator end = m_UIDTable.end();
for(; pos != end; )
{
CUserNode& node = pos->second;
if(node.GetAgentGroup() == Group)
{
pos = m_UIDTable.erase(pos);
}
else
{
++pos;
}
}
INFLOG2(g_Log, "그룹(%d)의 사용자 삭제 종료 %d", Group, nNum);
return nNum;
}