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>
This commit is contained in:
@@ -0,0 +1,208 @@
|
||||
#include "stdafx.h"
|
||||
#include "SendManagePacket.h"
|
||||
|
||||
#include <tchar.h>
|
||||
#include <Network/Session/Session.h>
|
||||
#include <Network/Dispatch/Dispatch.h>
|
||||
#include <Network/Packet/WrapPacket.h>
|
||||
#include <Network/Packet/ManagePacketCmd.h>
|
||||
#include <Stream/Buffer/Buffer.h>
|
||||
#include <Stream/Buffer/BufferFactory.h>
|
||||
#include <Utility/Compress/MiniLZO/MiniLZOWrapper.h>
|
||||
|
||||
#include <UserManage/ToolUserManageTable.h>
|
||||
#include <Log/ServerLog.h>
|
||||
|
||||
|
||||
/*!
|
||||
\brief <09><><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD>
|
||||
\param Session <09><><EFBFBD><EFBFBD>
|
||||
\param cCmd Ŀ<>ǵ<EFBFBD>
|
||||
\param nMessage <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DEBD><EFBFBD> <20><>ȣ
|
||||
\param wParam WPARAM
|
||||
\param lParam LPARAM
|
||||
\param dwRunID RunID
|
||||
\param usDataLen <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
\param usFlags <09>߰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD>
|
||||
\param lpData <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
\param cError <09><><EFBFBD><EFBFBD> Ŀ<>ǵ<EFBFBD>
|
||||
\return <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
*/
|
||||
bool ServerManage::SendManagePacket(CSession& Session,
|
||||
unsigned char cCmd,
|
||||
unsigned int nMessage,
|
||||
WPARAM wParam,
|
||||
LPARAM lParam,
|
||||
unsigned long dwRunID,
|
||||
unsigned short usDataLen,
|
||||
unsigned short usFlags,
|
||||
const void* lpData,
|
||||
unsigned char cError)
|
||||
{
|
||||
CBuffer* lpBuffer = CREATE_BUFFER(Session.GetPolicy().GetBufferFactory(),
|
||||
(sizeof(ManageCommand) + usDataLen));
|
||||
|
||||
if(0 != lpBuffer)
|
||||
{
|
||||
ManageCommand* lpManageCommand = reinterpret_cast<ManageCommand*>(lpBuffer->wr_ptr());
|
||||
|
||||
lpManageCommand->nMessage = nMessage; // <20><EFBFBD><DEBD><EFBFBD> <20><>ȣ
|
||||
lpManageCommand->wParam = wParam; // <20>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>1
|
||||
lpManageCommand->lParam = lParam; // <20>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>2
|
||||
|
||||
lpManageCommand->dwRunID = dwRunID; // <20><EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> IP
|
||||
lpManageCommand->usDataLen = (0 != lpData) ? usDataLen : 0; // <20>߰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
lpManageCommand->usFlags = usFlags; // <20><>Ÿ Ŀ<>ǵ<EFBFBD> (<28><><EFBFBD>뿡 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٸ<EFBFBD>)
|
||||
|
||||
if(0 != lpData)
|
||||
{
|
||||
memcpy(reinterpret_cast<char*>(lpManageCommand + 1), lpData, usDataLen);
|
||||
}
|
||||
|
||||
if(PacketWrap::WrapCrypt(lpBuffer, sizeof(ManageCommand) + usDataLen, cCmd, 0, cError)
|
||||
&& Session.SendPending(lpBuffer))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
SAFE_RELEASE_BUFFER(lpBuffer);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief <09><><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD>
|
||||
\param bufferFactory BufferFactory
|
||||
\param lpTarget <09><><EFBFBD><EFBFBD>. 0<≯<EFBFBD> Broadcast
|
||||
\param lpUserInfo <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>н<EFBFBD><D0BD><EFBFBD><EFBFBD>常 <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
\param cUserInfoNum <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
\param cCommand Ŀ<>ǵ<EFBFBD>.
|
||||
\param cError <09><><EFBFBD><EFBFBD>.
|
||||
\return <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
*/
|
||||
bool ServerManage::SendUserInfo(CBufferFactory& bufferFactory,
|
||||
CSession* lpTarget,
|
||||
const ServerManage::UserInfo* lpUserInfo,
|
||||
unsigned char cUserInfoNum,
|
||||
unsigned char cCommand,
|
||||
unsigned char cError)
|
||||
{
|
||||
// <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>鿡<EFBFBD><E9BFA1> <20>ڽ<EFBFBD><DABD><EFBFBD> <20>߰<EFBFBD><DFB0>Ǿ<EFBFBD><C7BE>ٴ<EFBFBD> <20><EFBFBD><DEBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
CBuffer* lpBuffer = CREATE_BUFFER(bufferFactory,
|
||||
sizeof(ServerManage::UserCommand) + sizeof(ServerManage::UserInfo) * cUserInfoNum);
|
||||
|
||||
CBuffer* lpCompressedBuffer = CREATE_BUFFER(bufferFactory,
|
||||
CMiniLZO::GetLeastCompressBuffer(sizeof(ServerManage::UserCommand) + sizeof(ServerManage::UserInfo) * cUserInfoNum));
|
||||
|
||||
if(0 != lpBuffer && 0 != lpCompressedBuffer)
|
||||
{
|
||||
ServerManage::UserCommand* lpUserCommand = reinterpret_cast<ServerManage::UserCommand*>(lpBuffer->wr_ptr());
|
||||
ServerManage::UserInfo* lpFirstUserInfo = reinterpret_cast<ServerManage::UserInfo*>(lpUserCommand + 1);
|
||||
ServerManage::UserInfo* lpLastUserInfo = lpFirstUserInfo + cUserInfoNum;
|
||||
|
||||
lpUserCommand->cUserInfoNum = cUserInfoNum;
|
||||
std::copy(lpUserInfo, lpUserInfo + cUserInfoNum, lpFirstUserInfo);
|
||||
|
||||
for(ServerManage::UserInfo* lpTempUserInfo = lpFirstUserInfo;
|
||||
lpTempUserInfo != lpLastUserInfo; ++lpTempUserInfo)
|
||||
{
|
||||
memset(lpTempUserInfo->szPassword, 0, sizeof(ServerManage::UserInfo::PASS_LEN) * sizeof(TCHAR));
|
||||
}
|
||||
|
||||
if(PacketWrap::WrapCompress(lpCompressedBuffer, lpBuffer->rd_ptr(),
|
||||
sizeof(ServerManage::UserCommand) + sizeof(ServerManage::UserInfo) * cUserInfoNum,
|
||||
cCommand, 0, cError))
|
||||
{
|
||||
if(lpTarget)
|
||||
{
|
||||
if(lpTarget->SendPending(lpCompressedBuffer))
|
||||
{
|
||||
SAFE_RELEASE_BUFFER(lpBuffer);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
CToolUserManager::GetInstance().SendToAllLoginUser(
|
||||
lpCompressedBuffer->rd_ptr(), lpCompressedBuffer->length(), lpUserCommand->GetCmd());
|
||||
|
||||
SAFE_RELEASE_BUFFER(lpCompressedBuffer);
|
||||
SAFE_RELEASE_BUFFER(lpBuffer);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SAFE_RELEASE_BUFFER(lpCompressedBuffer);
|
||||
SAFE_RELEASE_BUFFER(lpBuffer);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ServerManage::CheckUserPacketLength(PktBase* lpPktBase, int nExpectUserInfoNum)
|
||||
{
|
||||
PktBase::LengthType nLength = lpPktBase->GetLen();
|
||||
|
||||
if(nLength < sizeof(ServerManage::UserCommand))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
ServerManage::UserCommand* lpUserCommand = reinterpret_cast<ServerManage::UserCommand*>(lpPktBase);
|
||||
ServerManage::UserInfo* lpUserInfo = reinterpret_cast<ServerManage::UserInfo*>(lpUserCommand + 1);
|
||||
|
||||
if(0 < nExpectUserInfoNum)
|
||||
{
|
||||
if(nExpectUserInfoNum != lpUserCommand->cUserInfoNum ||
|
||||
nLength != sizeof(ServerManage::UserCommand) + sizeof(ServerManage::UserInfo) * nExpectUserInfoNum)
|
||||
{
|
||||
ERRLOG2(g_Log, "Invalid packet size : userinfo num : %d, packet size : %d",
|
||||
lpUserCommand->cUserInfoNum, nLength);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if(nLength != sizeof(ServerManage::UserCommand))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool ServerManage::CheckManagePacketLength(PktBase* lpPktBase)
|
||||
{
|
||||
unsigned short usPacketLength = lpPktBase->GetLen();
|
||||
|
||||
ServerManage::ManageCommand* lpManageCommand =
|
||||
reinterpret_cast<ServerManage::ManageCommand*>(lpPktBase);
|
||||
|
||||
if(usPacketLength < sizeof(ServerManage::ManageCommand) ||
|
||||
(usPacketLength != lpManageCommand->usDataLen + sizeof(ServerManage::ManageCommand)))
|
||||
{
|
||||
ERRLOG2(g_Log, "Invalid packet size : DataLen : %d, Packet size : %d",
|
||||
lpManageCommand->usDataLen, lpPktBase->GetLen());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
ServerManage::CSendManagePacketToClient::CSendManagePacketToClient(ManageCommand& manageCommand,
|
||||
const char* lpData)
|
||||
: m_ManageCommand(manageCommand),
|
||||
m_lpData(lpData)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool ServerManage::CSendManagePacketToClient::operator() (CPacketDispatch& dispatch)
|
||||
{
|
||||
return SendManagePacket(dispatch.GetSession(),
|
||||
m_ManageCommand.GetCmd(), m_ManageCommand.nMessage,
|
||||
m_ManageCommand.wParam, m_ManageCommand.lParam,
|
||||
m_ManageCommand.dwRunID, m_ManageCommand.usDataLen, m_ManageCommand.usFlags,
|
||||
m_lpData, static_cast<unsigned char>(m_ManageCommand.GetError()));
|
||||
}
|
||||
Reference in New Issue
Block a user