118 lines
2.9 KiB
C++
118 lines
2.9 KiB
C++
#include "StdAfx.h"
|
|
#include ".\tempuser.h"
|
|
#include "UserSessionFactory.h"
|
|
#include "User.h"
|
|
#include <Constant.h>
|
|
#include <PacketStruct_SM.h>
|
|
#include "UserManager.h"
|
|
#include "UserInfoParser.h"
|
|
#include "UserInfo.h"
|
|
#include "ServerInfoParser.h"
|
|
#include "WorldManager.h"
|
|
|
|
|
|
TempUser::TempUser(void)
|
|
{
|
|
}
|
|
|
|
TempUser::~TempUser(void)
|
|
{
|
|
}
|
|
|
|
|
|
VOID TempUser::OnDisconnect()
|
|
{
|
|
}
|
|
|
|
VOID TempUser::Init()
|
|
{
|
|
UserSession::Init();
|
|
}
|
|
|
|
VOID TempUser::Release()
|
|
{
|
|
UserSession::Release();
|
|
}
|
|
|
|
BOOL TempUser::SendPacket( MSG_BASE* pMsg, WORD wSize )
|
|
{
|
|
return UserSession::SendPacket( pMsg, wSize );
|
|
}
|
|
|
|
VOID TempUser::OnRecv( BYTE * pMsg, WORD wSize )
|
|
{
|
|
//1. 인증요청 패킷이 오면.. 인증검사 단계를 거치고,
|
|
//2. 성공이면... 새로운 네트워크객체를 생성시켜서, 할당하고, 메니져에 추가한다.
|
|
//3. 실패면..... 실패 메세지를 보낸다.
|
|
|
|
const WORD wLoginSyn = MAKEWORD( SM_USER, SM_USER_LOGIN_SYN );
|
|
MSG_BASE* pMsgBase = (MSG_BASE*)pMsg;
|
|
if( !pMsgBase ) return;
|
|
|
|
WORD wMsgKey = MAKEWORD( pMsgBase->m_byCategory, pMsgBase->m_byProtocol );
|
|
|
|
if( wLoginSyn == wMsgKey) //로그인 패킷이면..
|
|
{
|
|
MSG_SM_USER_LOGIN_SYN *pRecvMsg = (MSG_SM_USER_LOGIN_SYN*)pMsg;
|
|
if( !pRecvMsg ) return;
|
|
|
|
UserInfo* pUserInfo = UserInfoParser::Instance()->GetUserInfo( pRecvMsg->m_szUserID, pRecvMsg->m_szPassWord, GetIP() );
|
|
if( pUserInfo ) //있으면...
|
|
{
|
|
User* pNewUser = (User*)UserSessionFactory::Instance()->AllocUser( UT_USER );
|
|
pNewUser->SetUserKey( pUserInfo->GetUserGUID() );
|
|
pNewUser->SetID( pUserInfo->GetUserID() );
|
|
pNewUser->SetPassword( pUserInfo->GetUserPassWord() );
|
|
pNewUser->SetGrade( pUserInfo->GetUserGrade() );
|
|
|
|
Redirect( pNewUser );
|
|
UserSessionFactory::Instance()->FreeUser( this );
|
|
UserManager::Instance()->AddUser( pNewUser );
|
|
|
|
MSGOUT( "[User Login] ID : %s, IP : %s, KEY : %d", pUserInfo->GetUserID(), GetIP(), pNewUser->GetUserKey() );
|
|
|
|
MSG_SM_USER_LOGIN_ACK AckMsg;
|
|
AckMsg.m_byResult = RC_USER_LOGIN_SUCCESS;
|
|
AckMsg.m_dwUserKey = pUserInfo->GetUserGUID();
|
|
AckMsg.m_byGrade = pUserInfo->GetUserGrade();
|
|
pNewUser->SendPacket( &AckMsg, sizeof(AckMsg) );
|
|
|
|
// 서버정보 Send
|
|
MSG_SM_SERVER_INFO_CMD CmdMsg;
|
|
WorldManager::Instance()->SerializeServerInfoStreamForUser( CmdMsg.m_ServerTotalInfo, pNewUser->GetUserKey() );
|
|
pNewUser->SendPacket( &CmdMsg, CmdMsg.GetSize() );
|
|
|
|
#ifdef __20080312__SOLARAUTH_SERVER_PATCH
|
|
MSG_SM_SCRIPTFOLDER_INFO_CMD FoldInfo;
|
|
WorldManager::Instance()->SerializeScriptFolderInfoStream( FoldInfo.m_SCFolderTotalInfo, pNewUser->GetUserKey() );
|
|
pNewUser->SendPacket( &FoldInfo, FoldInfo.GetSize() );
|
|
#endif
|
|
|
|
// FTP 연결 정보 Send
|
|
MSG_SM_SERVER_FTP_INFO_CMD FtpCmd;
|
|
WorldManager::Instance()->SerializeFtpInfoStreamForUser( FtpCmd.m_FtpTotalInfo, pNewUser->GetUserKey() );
|
|
pNewUser->SendPacket( &FtpCmd, FtpCmd.GetSize() );
|
|
}
|
|
else //없으면..
|
|
{
|
|
MSG_SM_USER_LOGIN_ACK ack;
|
|
ack.m_byResult = RC_USER_LOGIN_FAIL;
|
|
SendPacket( &ack, sizeof(ack) );
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|