DragonNest/Server/DNDBServer/DNFriendTask.cpp

214 lines
7.8 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
#include "StdAfx.h"
#include "DNFriendTask.h"
#include "DNConnection.h"
#include "DNSQLConnectionManager.h"
#include "DNSQLMembership.h"
#include "DNSQLWorld.h"
#include "Util.h"
#include "Log.h"
CDNFriendTask::CDNFriendTask(CDNConnection* pConnection)
: CDNMessageTask(pConnection)
{
}
CDNFriendTask::~CDNFriendTask(void)
{
}
void CDNFriendTask::OnRecvMessage(int nThreadID, int nMainCmd, int nSubCmd, char* pData)
{
CDNSQLMembership *pMembershipDB = NULL;
CDNSQLWorld *pWorldDB = NULL;
int nRet = ERROR_DB;
switch (nSubCmd)
{
case QUERY_FRIENDLIST:
{
TQFriendList * pPacket = (TQFriendList*)pData;
TAFriendList packet;
memset(&packet, 0, sizeof(TAFriendList));
packet.nAccountDBID = pPacket->nAccountDBID;
packet.nRetCode = ERROR_DB;
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pPacket->cWorldSetID);
if (pWorldDB)
{
packet.nRetCode = pWorldDB->QueryGetListFriend(pPacket->biCharacterDBID, packet.cCount, packet.FriendData);
}
else
{
g_Log.Log(LogType::_ERROR, pPacket->cWorldSetID, pPacket->nAccountDBID, pPacket->biCharacterDBID, 0, L"[ADBID:%u CDBID:%lld] [QUERY_FRIENDLIST:%d] pWorldDB not found\r\n", pPacket->nAccountDBID, pPacket->biCharacterDBID, pPacket->cWorldSetID);
}
m_pConnection->AddSendData(nMainCmd, nSubCmd, (char*)&packet, \
sizeof(TAFriendList) - ((FRIEND_MAXCOUNT + FRIEND_GROUP_MAX - packet.cCount) * sizeof(TDBFriendData)));
}
break;
case QUERY_ADDGROUP:
{
TQAddGroup * pPacket = (TQAddGroup*)pData;
TAAddGroup packet;
memset(&packet, 0, sizeof(TAAddGroup));
packet.nAccountDBID = pPacket->nAccountDBID;
_wcscpy(packet.wszGroupName, _countof(packet.wszGroupName), pPacket->wszGroupName, (int)wcslen(pPacket->wszGroupName));
packet.nRetCode = ERROR_DB;
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pPacket->cWorldSetID);
if (pWorldDB)
{
packet.nRetCode = pWorldDB->QueryAddFriendGroup(pPacket->biCharacterDBID, pPacket->wszGroupName, pPacket->nGroupCountLimit, packet.nGroupDBID);
}
else
{
g_Log.Log(LogType::_ERROR, pPacket->cWorldSetID, pPacket->nAccountDBID, pPacket->biCharacterDBID, 0, L"[ADBID:%u CDBID:%lld] [QUERY_ADDGROUP:%d] pWorldDB not found\r\n", pPacket->nAccountDBID, pPacket->biCharacterDBID, pPacket->cWorldSetID);
}
m_pConnection->AddSendData(nMainCmd, nSubCmd, (char*)&packet, sizeof(packet));
}
break;
case QUERY_MODGROUPNAME:
{
TQModGroupName * pPacket = (TQModGroupName*)pData;
TAModGroupName packet;
memset(&packet, 0, sizeof(TAModGroupName));
packet.nAccountDBID = pPacket->nAccountDBID;
packet.nGroupDBID = pPacket->nGroupDBID;
_wcscpy(packet.wszGroupName, FRIEND_GROUP_NAMELENMAX, pPacket->wszGroupName, FRIEND_GROUP_NAMELENMAX);
packet.nRetCode = ERROR_DB;
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pPacket->cWorldSetID);
if (pWorldDB)
{
packet.nRetCode = pWorldDB->QueryModFriendGroupName(pPacket->biCharacterDBID, pPacket->nGroupDBID, pPacket->wszGroupName);
}
else
{
g_Log.Log(LogType::_ERROR, pPacket->cWorldSetID, pPacket->nAccountDBID, pPacket->biCharacterDBID, 0, L"[ADBID:%u CDBID:%lld] [QUERY_MODGROUPNAME:%d] pWorldDB not found\r\n", pPacket->nAccountDBID, pPacket->biCharacterDBID, pPacket->cWorldSetID);
}
m_pConnection->AddSendData(nMainCmd, nSubCmd, (char*)&packet, sizeof(packet));
}
break;
case QUERY_DELGROUP:
{
TQDelGroup * pPacket = (TQDelGroup*)pData;
TADelGroup packet;
memset(&packet, 0, sizeof(TADelGroup));
packet.nAccountDBID = pPacket->nAccountDBID;
packet.nGroupDBID = pPacket->nGroupDBID;
packet.nRetCode = ERROR_DB;
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pPacket->cWorldSetID);
if (pWorldDB)
{
packet.nRetCode = pWorldDB->QueryDelFriendGroup(pPacket->biCharacterDBID, pPacket->nGroupDBID);
}
else
{
g_Log.Log(LogType::_ERROR, pPacket->cWorldSetID, pPacket->nAccountDBID, pPacket->biCharacterDBID, 0, L"[ADBID:%u CDBID:%lld] [QUERY_DELGROUP:%d] pWorldDB not found\r\n", pPacket->nAccountDBID, pPacket->biCharacterDBID, pPacket->cWorldSetID);
}
m_pConnection->AddSendData(nMainCmd, nSubCmd, (char*)&packet, sizeof(packet));
}
break;
case QUERY_MODFRIENDANDGROUPMAPPING:
{
TQModFriendAndGroupMapping * pPacket = (TQModFriendAndGroupMapping*)pData;
TAModFriendAndGroupMapping packet;
memset(&packet, 0, sizeof(TAModFriendAndGroupMapping));
packet.nAccountDBID = pPacket->nAccountDBID;
packet.nGroupDBID = pPacket->nGroupDBID;
packet.nRetCode = ERROR_DB;
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pPacket->cWorldSetID);
if (pWorldDB)
{
packet.nRetCode = pWorldDB->QueryModFriendAndFriendGroupMapping(pPacket->biCharacterDBID, pPacket->cCount, pPacket->biFriendCharacterDBIDs, pPacket->nGroupDBID);
if (packet.nRetCode == ERROR_NONE)
{
packet.cCount = pPacket->cCount;
memcpy(packet.biFriendCharacterDBIDs, pPacket->biFriendCharacterDBIDs, (sizeof(packet.biFriendCharacterDBIDs)/sizeof(*packet.biFriendCharacterDBIDs)) * packet.cCount);
}
}
else
{
g_Log.Log(LogType::_ERROR, pPacket->cWorldSetID, pPacket->nAccountDBID, pPacket->biCharacterDBID, 0, L"[ADBID:%u CDBID:%lld] [QUERY_MODFRIENDANDGROUPMAPPING:%d] pWorldDB not found\r\n", pPacket->nAccountDBID, pPacket->biCharacterDBID, pPacket->cWorldSetID);
}
m_pConnection->AddSendData(nMainCmd, nSubCmd, (char*)&packet, sizeof(packet) - sizeof(packet.biFriendCharacterDBIDs) + (sizeof(INT64) * packet.cCount));
}
break;
case QUERY_ADDFRIEND:
{
TQAddFriend * pPacket = (TQAddFriend*)pData;
TAAddFriend packet;
memset(&packet, 0, sizeof(TAAddFriend));
packet.nAccountDBID = pPacket->nAccountDBID;
packet.nGroupDBID = pPacket->nGroupDBID;
_wcscpy(packet.wszFriendName, _countof(packet.wszFriendName), pPacket->wszFriendName, (int)wcslen(pPacket->wszFriendName));
packet.nRetCode = ERROR_DB;
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pPacket->cWorldSetID);
if (pWorldDB)
{
bool bNeedDelIsolate = false;
packet.nRetCode = pWorldDB->QueryAddFriend(pPacket->biCharacterDBID, pPacket->wszFriendName, L"", pPacket->nGroupDBID, pPacket->nFriendCountLimit, packet.biFriendCharacterDBID, packet.nFriendAccountDBID, bNeedDelIsolate);
if (packet.nRetCode == ERROR_NONE)
packet.cNeedDelIsolate = bNeedDelIsolate == true ? 1 : 0;
}
else
{
g_Log.Log(LogType::_ERROR, pPacket->cWorldSetID, pPacket->nAccountDBID, pPacket->biCharacterDBID, 0, L"[ADBID:%u CDBID:%lld] [QUERY_ADDFRIEND:%d] pWorldDB not found\r\n", pPacket->nAccountDBID, pPacket->biCharacterDBID, pPacket->cWorldSetID);
}
m_pConnection->AddSendData(nMainCmd, nSubCmd, (char*)&packet, sizeof(packet));
}
break;
case QUERY_DELFRIEND:
{
TQDelFriend * pPacket = (TQDelFriend*)pData;
TADelFriend packet;
memset(&packet, 0, sizeof(TADelFriend));
packet.nAccountDBID = pPacket->nAccountDBID;
packet.cCount = pPacket->cCount;
memcpy(packet.biFriendCharacterDBIDs, pPacket->biFriendCharacterDBIDs, sizeof(packet.biFriendCharacterDBIDs[0]) * packet.cCount);
packet.nRetCode = ERROR_DB;
pWorldDB = g_SQLConnectionManager.FindWorldDB(nThreadID, pPacket->cWorldSetID);
if (pWorldDB)
{
packet.nRetCode = pWorldDB->QueryDelFriend(pPacket->biCharacterDBID, pPacket->cCount, pPacket->biFriendCharacterDBIDs);
}
else
{
g_Log.Log(LogType::_ERROR, pPacket->cWorldSetID, pPacket->nAccountDBID, pPacket->biCharacterDBID, 0, L"[ADBID:%u CDBID:%lld] [QUERY_ADDFRIEND:%d] pWorldDB not found\r\n", pPacket->nAccountDBID, pPacket->biCharacterDBID, pPacket->cWorldSetID);
}
m_pConnection->AddSendData(nMainCmd, nSubCmd, (char*)&packet, sizeof(packet) - sizeof(packet.biFriendCharacterDBIDs) + sizeof(packet.biFriendCharacterDBIDs[0]) * packet.cCount );
}
break;
case QUERY_MODFRIENDMEMO:
{
//<2F>޸<EFBFBD><DEB8><EFBFBD> <20>Ƚ<EFBFBD><C8BD><EFBFBD>.
}
break;
}
}