Files
2026-11-07 13:30:45 +07:00

91 lines
1.7 KiB
C++

#include "stdafx.h"
#include "cSessionTable.h"
cSessionTable g_sessionTable;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
cSessionTable::cSessionTable(void)
{
Init();
}
cSessionTable::~cSessionTable(void)
{
Destroy();
}
void cSessionTable::Init()
{
}
void cSessionTable::Destroy()
{
m_sessions.clear();
}
//////////////////////////////////////////////////////////////////////
// Operation
//////////////////////////////////////////////////////////////////////
BOOL cSessionTable::Insert(const uint32 entity, IIocpContext* context)
{
cSession* session = Get(entity);
if(!session)
{
session = new cSession;
session->SetContext(context);
session->OnConnect();
m_sessions[entity] = session;
return TRUE;
}
return FALSE;
}
void cSessionTable::Remove(const uint32 entity)
{
cSession* session = Get(entity);
if(!session) return;
SESSION_TABLE::iterator it = m_sessions.find(entity);
if(it != m_sessions.end())
{
m_sessions.erase(it);
}
switch(session->GetType())
{
case SESSION_LOGIN :
case SESSION_PLAYER :
case SESSION_SERVER :
default :
{
delete session;
}
break;
}
}
cSession* cSessionTable::Get(const uint32 entity)
{
SESSION_TABLE::iterator it = m_sessions.find(entity);
return (it != m_sessions.end()) ? it->second : NULL;
}
cSession* cSessionTable::GetFirst()
{
m_iterator = m_sessions.begin();
return (m_iterator != m_sessions.end()) ? m_iterator->second : NULL;
}
cSession* cSessionTable::GetNext()
{
++m_iterator;
return (m_iterator != m_sessions.end()) ? m_iterator->second : NULL;
}