Files
Sun1602/Server/Common/TempServerSession.cpp
T
2022-10-26 12:25:11 +08:00

73 lines
2.3 KiB
C++

#include "stdafx.h"
#include "./TempServerSession.h"
#include <ServerGlobal.h>
#include <PacketStruct_ServerCommon.h>
#include "./ServerFrame.h"
//==================================================================================================
__IMPL_CUSTOMPOOL_PTR(TempServerSession);
//==================================================================================================
TempServerSession::TempServerSession(void)
{
}
TempServerSession::~TempServerSession(void)
{
}
void TempServerSession::Init()
{
ServerSession::Init();
m_bFirst = TRUE;
}
void TempServerSession::OnRecv(BYTE* msg, WORD msg_size)
{
ASSERT(m_bFirst != false);
m_bFirst = false;
// NOTE: f110617.1L, After using dual buffer for reception, ... hummmm. ...
MSG_SERVER_TYPE* recv_msg = (MSG_SERVER_TYPE *)msg;
const bool valid_message = recv_msg->m_byCategory == SERVERCOMMON &&
recv_msg->m_byProtocol == SERVERCOMMON_SERVERTYPE &&
sizeof(*recv_msg) == msg_size;
if (valid_message == false)
{
SUNLOG(eCRITICAL_LOG,
_T("|["__FUNCTION__"]|斤口=澗돕雷棍돨뒤寧係句口, ")
_T("C:P=%03d:%03d, size=%d|"),
recv_msg->m_byCategory, recv_msg->m_byProtocol, msg_size);
return;
};
//----------------------------------------------------------------------------------------------
ServerFrame* const server_frame = GetFrame();
// <Waverix> [9/8/2006]
// 새롭게 바꾸는 GameServer의 경우 ServerType에 대한 검사에 취약한 점이 존재한다.
// 만에 하나를 위해 여기서 검사를 수행하는 것으로 하자. 그런데... 로그는 없어도 되나???
ServerSession* new_session = NULL;
const eSERVER_TYPE server_type = static_cast<eSERVER_TYPE>(recv_msg->m_byServerType);
if (DWORD(server_type) < DWORD(MAX_SERVER)) {
new_session = server_frame->AllocServerSession(server_type);
};
if (new_session == NULL)
{
Disconnect();
SUNLOG(eCRITICAL_LOG, _T("|["__FUNCTION__"]|斤口=灌列륩蛟 (%d)"), server_type);
return;
}
//
Redirect(new_session);
//
// TempServerSession의 인덱스를 새로운 세션에 전달해줌!
DWORD session_index = GetSessionIndex();
server_frame->RemoveSession(session_index);
server_frame->FreeServerSession(this);
//
new_session->OnRedirect(session_index, recv_msg);
}