DragonNest/Server/DNCashServer/DNConnection.cpp
2024-12-19 09:48:26 +08:00

770 lines
26 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "StdAfx.h"
#include "DNConnection.h"
#include "DNSQLWorld.h"
#include "DNSQLMembership.h"
#include "DNSQLManager.h"
#include "DNExtManager.h"
#include "DNUserRepository.h"
#include "DNManager.h"
#include "DNManager.h"
#include "Util.h"
#include "Log.h"
#include "DNUserDeleteManager.h"
#ifdef PRE_ADD_LIMITED_CASHITEM
#include "DNLimitedCashItemRepository.h"
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
#if defined(_KR) || defined(_US)
#include "DNBillingConnectionKR.h"
#elif defined(_JP)
#include "DNBillingConnectionJP.h"
#elif defined(_CH) || defined(_EU)
#include "DNBillingConnectionCH.h"
#elif defined(_TW)
#include "DNBillingConnectionTW.h"
#elif defined(_SG)
#include "DNBillingConnectionSG.h"
#elif defined(_TH)
#include "DNBillingConnectionTH.h"
#endif // _KR _JP _CH _TW
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
USER_REQUEST UserRequestCompareExchange(USER_REQUEST volatile* pDestination, USER_REQUEST exchange, USER_REQUEST comperand)
{
#if defined (_WIN64)
return InterlockedCompareExchange64(pDestination, exchange, comperand);
#else
return InterlockedCompareExchange(pDestination, exchange, comperand);
#endif // #if defined (_WIN64)
}
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
CDNConnection::CDNConnection(void)
{
#if defined(_FINAL_BUILD)
Init(1024 * 1024, 1024 * 1024);
#else // #if defined(_FINAL_BUILD)
Init(1024 * 100, 1024 * 100);
#endif // #if defined(_FINAL_BUILD)
}
CDNConnection::~CDNConnection(void)
{
}
int CDNConnection::MessageProcess(int iMainCmd, int iSubCmd, char *pData, int iLen)
{
return 0;
}
void CDNConnection::DBMessageProcess(char *pData, int nThreadID)
{
DNTPacket *pPacket = (DNTPacket*)pData;
switch(pPacket->cMainCmd)
{
case MAINCMD_CASH: OnRecvCashShop(nThreadID, pPacket->cSubCmd, pPacket->buf); break;
}
}
void CDNConnection::OnRecvCashShop(int nThreadID, int nSubCmd, char *pData)
{
switch (nSubCmd)
{
case CASH_SALEABORTLIST:
{
std::vector<int> VecProhibitSaleList;
VecProhibitSaleList.clear();
UINT nAccountDBID;
memcpy(&nAccountDBID, pData, sizeof(UINT));
CDNSQLMembership *pMembershipDB = g_pSQLManager->FindMembershipDB(nThreadID);
if (!pMembershipDB){
g_Log.Log(LogType::_ERROR, 0, nAccountDBID, 0, 0, L"[M:%d S:%d] pMembershipDB not found\r\n", MAINCMD_CASH, nSubCmd);
return;
}
pMembershipDB->QueryGetListBanOfSale(VecProhibitSaleList);
SendSaleAbortList(VecProhibitSaleList);
}
break;
#ifdef PRE_ADD_LIMITED_CASHITEM
case CASH_LIMITEDITEM_INFOLIST:
{
if (g_pLimitedCashItemRepository)
{
std::vector<LimitedCashItem::TLimitedQuantityCashItem> vList;
if (g_pLimitedCashItemRepository->GetLimitedItemList(vList))
SendLimiteItemInfoList(vList);
std::vector<LimitedCashItem::TChangedLimitedQuantity> vChangedList;
if (g_pLimitedCashItemRepository->GetChangedLimitedItemList(vChangedList))
SendChangedLimitedItemInfoList(vChangedList);
}
}
break;
case CASH_CHANGEDLIMITEDITEM_INFOLIST:
{
TQChangeLimitMax * pPacket = (TQChangeLimitMax*)pData;
if (g_pLimitedCashItemRepository)
{
if (g_pLimitedCashItemRepository->UpdateChangedLimitedItemMax(pPacket->nSN, pPacket->nLimitMax))
{
std::vector<LimitedCashItem::TChangedLimitedQuantity> vChangedList;
if (g_pLimitedCashItemRepository->GetChangedLimitedItemList(vChangedList))
SendChangedLimitedItemInfoList(vChangedList);
}
else
{
_DANGER_POINT_MSG(L"g_pLimitedCashItemRepository->UpdateChangedLimitedItemMax Fail");
}
}
}
break;
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
case CASH_DELUSER:
{
TQCashDelUser *pCash = (TQCashDelUser*)pData;
g_pUserDeleteManager->Add(pCash->nAccountDBID, true);
}
break;
case CASH_BALANCEINQUIRY:
{
TQCashBalanceInquiry *pCash = (TQCashBalanceInquiry *)pData;
g_pUserDeleteManager->Remove(pCash->nAccountDBID, true);
// <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ϵ<EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
CDNUserRepository *pUser = g_pManager->AddUser(pCash->nAccountDBID);
if (!pUser){
SendBalanceInquiry(ERROR_GENERIC_USER_NOT_FOUND, pCash->nAccountDBID, 0, 0, pCash->bOpen, pCash->bServer);
return;
}
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
if (UserRequestCompareExchange(&pUser->m_Requesting, CASH_REQUESTING, CASH_NO_REQUESTING) == CASH_REQUESTING)
return;
CRequestReleaser releaser(pUser->m_Requesting);
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
int nRet = pUser->OnBalanceInquiry(nThreadID, this, pCash);
if (nRet != ERROR_NONE)
return;
#if defined(_KR) || defined(_US) || defined(_TW) || defined(_TH)
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
releaser.Lock();
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
#endif //
}
break;
case CASH_BUY:
{
TQCashBuy *pCash = (TQCashBuy *)pData;
CDNUserRepository *pUser = g_pManager->GetUser(pCash->nAccountDBID);
if (!pUser){
SendBuy(pCash->nAccountDBID, ERROR_ITEM_FAIL, pCash->cCartType, 0, pCash->cProductCount, pCash->BuyList);
return;
}
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
if (UserRequestCompareExchange(&pUser->m_Requesting, CASH_REQUESTING, CASH_NO_REQUESTING) == CASH_REQUESTING)
return;
CRequestReleaser releaser(pUser->m_Requesting);
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
int nRet = pUser->OnBuy(nThreadID, this, pCash);
if (nRet != ERROR_NONE)
return;
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
#if defined (_KR) || defined (_TW) || defined (_CH) || defined (_US) || defined(_EU)
#if defined( PRE_ADD_NEW_MONEY_SEED )
if (pCash->cPaymentRules != Cash::PaymentRules::Petal && pCash->cPaymentRules != Cash::PaymentRules::Seed)
#else
if (pCash->cPaymentRules != Cash::PaymentRules::Petal)
#endif
releaser.Lock();
#endif // #if defined (_KR) || defined (_TW) || defined (_CH) || defined (_US) || defined(_EU)
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
}
break;
case CASH_PACKAGEBUY:
{
//return;
TQCashPackageBuy *pCash = (TQCashPackageBuy *)pData;
CDNUserRepository *pUser = g_pManager->GetUser(pCash->nAccountDBID);
if (!pUser){
SendPackageBuy(pCash->nAccountDBID, ERROR_ITEM_NOTFOUND, 0, pCash->nPackageSN, pCash->cPackageCount, pCash->BuyList);
return;
}
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
if (UserRequestCompareExchange(&pUser->m_Requesting, CASH_REQUESTING, CASH_NO_REQUESTING) == CASH_REQUESTING)
return;
CRequestReleaser releaser(pUser->m_Requesting);
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
int nRet = pUser->OnPackageBuy(nThreadID, this, pCash);
if (nRet != ERROR_NONE)
return;
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
#if defined (_KR) || defined (_TW) || defined (_CH) || defined (_US) || defined(_EU)
#if defined( PRE_ADD_NEW_MONEY_SEED )
if (pCash->cPaymentRules != Cash::PaymentRules::Petal && pCash->cPaymentRules != Cash::PaymentRules::Seed)
#else
if (pCash->cPaymentRules != Cash::PaymentRules::Petal)
#endif
releaser.Lock();
#endif // #if defined (_KR) || defined (_TW) || defined (_CH) || defined (_US) || defined(_EU)
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
}
break;
case CASH_GIFT:
{
TQCashGift *pCash = (TQCashGift *)pData;
CDNUserRepository *pUser = g_pManager->GetUser(pCash->nAccountDBID);
if (!pUser){
#if defined(PRE_ADD_CADGE_CASH)
SendGift(ERROR_ITEM_NOTFOUND, pCash->nAccountDBID, 0, (INT64)0, 0, 0, pCash->cCartType, pCash->cProductCount, pCash->GiftList, pCash->nMailDBID, 0);
#else // #if defined(PRE_ADD_CADGE_CASH)
SendGift(ERROR_ITEM_NOTFOUND, pCash->nAccountDBID, 0, (INT64)0, 0, 0, pCash->cCartType, pCash->cProductCount, pCash->GiftList, 0,0);
#endif // #if defined(PRE_ADD_CADGE_CASH)
return;
}
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
if (UserRequestCompareExchange(&pUser->m_Requesting, CASH_REQUESTING, CASH_NO_REQUESTING) == CASH_REQUESTING)
return;
CRequestReleaser releaser(pUser->m_Requesting);
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
int nRet = pUser->OnGift(nThreadID, this, pCash);
if (nRet != ERROR_NONE)
return;
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
#if defined (_KR) || defined (_TW) || defined (_CH) || defined (_US) || defined(_EU)
releaser.Lock();
#endif // #if defined (_KR) || defined (_TW) || defined (_CH) || defined (_US) || defined(_EU)
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
}
break;
case CASH_PACKAGEGIFT:
{
TQCashPackageGift *pCash = (TQCashPackageGift *)pData;
CDNUserRepository *pUser = g_pManager->GetUser(pCash->nAccountDBID);
if (!pUser){
#if defined(PRE_ADD_CADGE_CASH)
SendPackageGift(ERROR_ITEM_NOTFOUND, pCash->nAccountDBID, 0, (INT64)0, 0, 0, pCash->nPackageSN, pCash->cPackageCount, pCash->GiftList, pCash->nMailDBID, 0);
#else // #if defined(PRE_ADD_CADGE_CASH)
SendPackageGift(ERROR_ITEM_NOTFOUND, pCash->nAccountDBID, 0, (INT64)0, 0, 0, pCash->nPackageSN, pCash->cPackageCount, pCash->GiftList, 0, 0);
#endif // #if defined(PRE_ADD_CADGE_CASH)
return;
}
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
if (UserRequestCompareExchange(&pUser->m_Requesting, CASH_NO_REQUESTING, CASH_REQUESTING) == CASH_REQUESTING)
return;
CRequestReleaser releaser(pUser->m_Requesting);
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
int nRet = pUser->OnPackageGift(nThreadID, this, pCash);
if (nRet != ERROR_NONE)
return;
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
#if defined (_KR) || defined (_TW) || defined (_CH) || defined (_US) || defined(_EU)
releaser.Lock();
#endif // #if defined (_KR) || defined (_TW) || defined (_CH) || defined (_US) || defined(_EU)
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
}
break;
case CASH_COUPON:
{
return;
/*
TQCashCoupon *pCash = (TQCashCoupon*)pData;
CDNUserRepository *pUser = g_pManager->GetUser(pCash->nAccountDBID);
if (!pUser){
SendCoupon(pCash->nAccountDBID, ERROR_ITEM_NOTFOUND);
return;
}
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
if (UserRequestCompareExchange(&pUser->m_Requesting, CASH_REQUESTING, CASH_NO_REQUESTING) == CASH_REQUESTING)
return;
CRequestReleaser releaser(pUser->m_Requesting);
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
int nRet = pUser->OnCoupon(nThreadID, this, pCash);
if (nRet != ERROR_NONE)
return;
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
#if defined (_KR) || defined (_TW) || defined (_US)
releaser.Lock();
#endif // #if defined (_KR) || defined (_TW) || defined (_US)
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
*/
}
break;
case CASH_VIPBUY:
{
TQCashVIPBuy *pCash = (TQCashVIPBuy*)pData;
CDNUserRepository *pUser = g_pManager->GetUser(pCash->nAccountDBID);
if (!pUser){
SendVIPBuy(pCash->nAccountDBID, ERROR_ITEM_FAIL, 0, 0, 0, 0, 0, pCash->bAutoPay, pCash->bServer, 0 );
return;
}
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
if (UserRequestCompareExchange(&pUser->m_Requesting, CASH_REQUESTING, CASH_NO_REQUESTING) == CASH_REQUESTING)
return;
CRequestReleaser releaser(pUser->m_Requesting);
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
int nRet = pUser->OnVIPBuy(nThreadID, this, pCash);
if (nRet != ERROR_NONE)
return;
/*
//raw<61><77><EFBFBD><EFBFBD><EFBFBD>¹<EFBFBD><C2B9><EFBFBD>VIP<49><50>Ʒ<EFBFBD><C6B7><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
releaser.Lock();
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
*/
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
#if defined (_KR) || defined (_TW) || defined (_CH) || defined (_US) || defined(_EU)
releaser.Lock();
#endif // #if defined (_KR) || defined (_TW) || defined (_CH) || defined (_US) || defined(_EU)
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
}
break;
case CASH_VIPGIFT:
{
return;
/*
TQCashVIPGift *pCash = (TQCashVIPGift*)pData;
CDNUserRepository *pUser = g_pManager->GetUser(pCash->nAccountDBID);
if (!pUser){
SendVIPGift(pCash->nAccountDBID, ERROR_ITEM_FAIL, 0, 0, 0, 0, 0, 0, 0);
return;
}
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
if (UserRequestCompareExchange(&pUser->m_Requesting, CASH_REQUESTING, CASH_NO_REQUESTING) == CASH_REQUESTING)
return;
CRequestReleaser releaser(pUser->m_Requesting);
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
int nRet = pUser->OnVIPGift(nThreadID, this, pCash);
if (nRet != ERROR_NONE)
return;
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
//releaser.Lock();
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
*/
}
break;
#if defined(PRE_ADD_CASH_REFUND)
case CASH_MOVE_CASHINVEN:
{
TQCashMoveCashInven* pCash = (TQCashMoveCashInven*)pData;
CDNUserRepository *pUser = g_pManager->GetUser(pCash->nAccountDBID);
if (!pUser){
SendMoveCashInven(pCash->nAccountDBID, ERROR_ITEM_NOTFOUND, 0, 0, NULL, 0);
return;
}
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
if (UserRequestCompareExchange(&pUser->m_Requesting, CASH_REQUESTING, CASH_NO_REQUESTING) == CASH_REQUESTING)
return;
CRequestReleaser releaser(pUser->m_Requesting);
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
pUser->OnMoveCashInven(nThreadID, this, pCash);
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
releaser.Lock();
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
}
break;
case CASH_PACKAGE_MOVE_CASHINVEN :
{
TQCashPackageMoveCashInven* pCash = (TQCashPackageMoveCashInven*)pData;
CDNUserRepository *pUser = g_pManager->GetUser(pCash->nAccountDBID);
if (!pUser){
SendPackageMoveCashInven(pCash->nAccountDBID, ERROR_ITEM_NOTFOUND, 0, 0, NULL, 0);
return;
}
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
if (UserRequestCompareExchange(&pUser->m_Requesting, CASH_REQUESTING, CASH_NO_REQUESTING) == CASH_REQUESTING)
return;
CRequestReleaser releaser(pUser->m_Requesting);
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
pUser->OnPackageMoveCashInven(nThreadID, this, pCash);
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
releaser.Lock();
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
}
break;
case CASH_REFUNDCASH :
{
TQCashRefund* pCashRefund = (TQCashRefund*)pData;
CDNUserRepository *pUser = g_pManager->GetUser(pCashRefund->nAccountDBID);
if (!pUser){
SendCoupon(pCashRefund->nAccountDBID, ERROR_ITEM_NOTFOUND);
return;
}
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
if (UserRequestCompareExchange(&pUser->m_Requesting, CASH_REQUESTING, CASH_NO_REQUESTING) == CASH_REQUESTING)
return;
CRequestReleaser releaser(pUser->m_Requesting);
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
pUser->OnRefund(nThreadID, this, pCashRefund);
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
releaser.Lock();
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
}
break;
#endif // #if defined(PRE_ADD_CASH_REFUND)
}
}
void CDNConnection::SendSaleAbortList(std::vector<int> &VecProhibitSaleList)
{
TASaleAbortList Cash = { 0, };
if (!VecProhibitSaleList.empty()){
Cash.cCount = (BYTE)VecProhibitSaleList.size();
for (int i = 0; i < Cash.cCount; i++){
Cash.nAbortList[i] = VecProhibitSaleList[i];
}
}
AddSendData(MAINCMD_CASH, CASH_SALEABORTLIST, (char*)&Cash, sizeof(TASaleAbortList) - sizeof(Cash.nAbortList) + (sizeof(int) * Cash.cCount));
}
#ifdef PRE_ADD_LIMITED_CASHITEM
void CDNConnection::SendLimiteItemInfoList(std::vector<LimitedCashItem::TLimitedQuantityCashItem> &vList)
{
TAGetLimitedItemList packet;
memset(&packet, 0, sizeof(TAGetLimitedItemList));
for (int i = 0; i < (int)vList.size(); i++)
{
packet.Limited[packet.cCount++] = vList[i];
if (packet.cCount >= LimitedCashItem::Common::DefaultPacketCount)
{
AddSendData(MAINCMD_CASH, CASH_LIMITEDITEM_INFOLIST, (char*)&packet, sizeof(TAGetLimitedItemList) - sizeof(packet.Limited) + \
(sizeof(LimitedCashItem::TLimitedQuantityCashItem) * packet.cCount));
memset(&packet, 0, sizeof(TAGetLimitedItemList));
}
}
packet.cIsLast = 1;
AddSendData(MAINCMD_CASH, CASH_LIMITEDITEM_INFOLIST, (char*)&packet, sizeof(TAGetLimitedItemList) - sizeof(packet.Limited) + \
(sizeof(LimitedCashItem::TLimitedQuantityCashItem) * packet.cCount));
}
void CDNConnection::SendChangedLimitedItemInfoList(std::vector<LimitedCashItem::TChangedLimitedQuantity> &vList)
{
TAGetChangedLimitedItemList packet;
memset(&packet, 0, sizeof(TAGetChangedLimitedItemList));
for (int i = 0; i < (int)vList.size(); i++)
{
packet.Limited[packet.cCount++] = vList[i];
if (packet.cCount >= LimitedCashItem::Common::DefaultPacketCount)
break;
}
AddSendData(MAINCMD_CASH, CASH_CHANGEDLIMITEDITEM_INFOLIST, (char*)&packet, sizeof(TAGetChangedLimitedItemList) - sizeof(packet.Limited) + \
(sizeof(LimitedCashItem::TLimitedQuantityCashItem) * packet.cCount));
}
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
void CDNConnection::SendBalanceInquiry(UINT nResult, UINT nAccountDBID, int nCashBalance, int nPetal, bool bOpen, bool bServer, int nNotRefundableBalance/* = 0*/)
{
TACashBalanceInquiry Cash;
memset(&Cash, 0, sizeof(Cash));
Cash.nAccountDBID = nAccountDBID;
Cash.nCashBalance = nCashBalance;
Cash.nPetal = nPetal;
Cash.nResult = nResult;
Cash.bOpen = bOpen;
Cash.bServer = bServer;
#if defined(_US)
Cash.nNotRefundableBalance = nNotRefundableBalance;
#endif // _US
AddSendData(MAINCMD_CASH, CASH_BALANCEINQUIRY, (char*)&Cash, sizeof(TACashBalanceInquiry));
}
#if defined(PRE_ADD_SALE_COUPON)
void CDNConnection::SendBuy(UINT nAccountDBID, int nResult, char cCartType, int nPetalBalance, char cProductCount, TCashBuyItem *BuyList, TPaymentItemInfoEx* pPaymentItem, char cPaymentRules, INT64 biSaleCouponSerial, INT64 nSeedPoint/*=0*/)
#else
void CDNConnection::SendBuy(UINT nAccountDBID, int nResult, char cCartType, int nPetalBalance, char cProductCount, TCashBuyItem *BuyList, TPaymentItemInfoEx* pPaymentItem, char cPaymentRules/* = 0*/, INT64 nSeedPoint/*=0*/)
#endif
{
TACashBuy Cash;
memset(&Cash, 0, sizeof(Cash));
Cash.nAccountDBID = nAccountDBID;
Cash.nResult = nResult;
Cash.cPaymentRules = cPaymentRules; // Cash::PaymentRules
Cash.nPetalBalance = nPetalBalance;
Cash.cCartType = cCartType;
Cash.cProductCount = cProductCount;
if ((cProductCount > 0) && BuyList)
memcpy(Cash.BuyList, BuyList, sizeof(TCashBuyItem) * cProductCount);
#if defined(PRE_ADD_CASH_REFUND)
if( pPaymentItem )
memcpy(Cash.ItemList, pPaymentItem, sizeof(Cash.ItemList));
#endif
#if defined(PRE_ADD_SALE_COUPON)
Cash.biSaleCouponSerial = biSaleCouponSerial;
#endif
#if defined( PRE_ADD_NEW_MONEY_SEED )
Cash.nSeedPoint = nSeedPoint;
#endif
int nLen = sizeof(TACashBuy) - sizeof(Cash.BuyList) + (sizeof(TCashBuyItem) * cProductCount);
AddSendData(MAINCMD_CASH, CASH_BUY, (char*)&Cash, nLen);
}
#if defined(PRE_ADD_SALE_COUPON)
void CDNConnection::SendPackageBuy(UINT nAccountDBID, int nResult, int nPetalBalance, int nPackageSN, char cPackageCount, TCashItemBase *PackageList, TPaymentPackageItemInfoEx* PaymentPackageItem, char cPaymentRules, INT64 biSaleCouponSerial, INT64 nSeedPoint/*=0*/)
#else
void CDNConnection::SendPackageBuy(UINT nAccountDBID, int nResult, int nPetalBalance, int nPackageSN, char cPackageCount, TCashItemBase *PackageList, TPaymentPackageItemInfoEx* PaymentPackageItem, char cPaymentRules/* = 0*/, INT64 nSeedPoint/*=0*/)
#endif
{
TACashPackageBuy Cash;
memset(&Cash, 0, sizeof(Cash));
Cash.nAccountDBID = nAccountDBID;
Cash.nResult = nResult;
Cash.cPaymentRules = cPaymentRules; // Cash::PaymentRules
Cash.nPackageSN = nPackageSN;
Cash.cPackageCount = cPackageCount;
if (PackageList) memcpy(Cash.BuyList, PackageList, sizeof(TCashItemBase) * cPackageCount);
#if defined(PRE_ADD_CASH_REFUND)
if( PaymentPackageItem )
memcpy(&Cash.PaymentItem, PaymentPackageItem, sizeof(Cash.PaymentItem));
#endif
#if defined(PRE_ADD_SALE_COUPON)
Cash.biSaleCouponSerial = biSaleCouponSerial;
#endif
#if defined( PRE_ADD_NEW_MONEY_SEED )
Cash.nSeedPoint = nSeedPoint;
#endif
int nLen = sizeof(TACashPackageBuy) - sizeof(Cash.BuyList) + (sizeof(TCashItemBase) * cPackageCount);
AddSendData(MAINCMD_CASH, CASH_PACKAGEBUY, (char*)&Cash, nLen);
}
void CDNConnection::SendGift(int nResult, UINT nAccountDBID, UINT nReceiverAccountDBID, INT64 biReceiverCharacterDBID, int nReceiverGiftCount, int nPetal, char cCartType, char cGiftCount, TCashGiftItem *GiftList, int nMailDBID, INT64 nSeedPoint)
{
TACashGift Cash;
memset(&Cash, 0, sizeof(Cash));
Cash.nResult = nResult;
Cash.nAccountDBID = nAccountDBID;
Cash.nReceiverAccountDBID = nReceiverAccountDBID;
Cash.biReceiverCharacterDBID = biReceiverCharacterDBID;
Cash.nReceiverGiftCount = nReceiverGiftCount;
Cash.nPetalBalance = nPetal;
Cash.cCartType = cCartType;
#if defined(PRE_ADD_CADGE_CASH)
Cash.nMailDBID = nMailDBID;
#endif // #if defined(PRE_ADD_CADGE_CASH)
#if defined( PRE_ADD_NEW_MONEY_SEED )
Cash.nSeedPoint = nSeedPoint;
#endif
Cash.cGiftCount = cGiftCount;
if ((cGiftCount > 0) && GiftList)
memcpy(Cash.GiftList, GiftList, sizeof(TCashGiftItem) * cGiftCount);
int nLen = sizeof(TACashGift) - sizeof(Cash.GiftList) + (sizeof(TCashGiftItem) * cGiftCount);
AddSendData(MAINCMD_CASH, CASH_GIFT, (char*)&Cash, nLen);
}
void CDNConnection::SendPackageGift(int nResult, UINT nAccountDBID, UINT nReceiverAccountDBID, INT64 biReceiverCharacterDBID, int nReceiverGiftCount, int nPetalBalance, int nPackageSN, char cPackageCount, TCashPackageGiftItem *PackageList, int nMailDBID, INT64 nSeedPoint)
{
TACashPackageGift Cash;
memset(&Cash, 0, sizeof(Cash));
Cash.nAccountDBID = nAccountDBID;
Cash.nReceiverAccountDBID = nReceiverAccountDBID;
Cash.biReceiverCharacterDBID = biReceiverCharacterDBID;
Cash.nReceiverGiftCount = nReceiverGiftCount;
Cash.nResult = nResult;
Cash.nPetalBalance = nPetalBalance;
Cash.nPackageSN = nPackageSN;
#if defined(PRE_ADD_CADGE_CASH)
Cash.nMailDBID = nMailDBID;
#endif // #if defined(PRE_ADD_CADGE_CASH)
#if defined( PRE_ADD_NEW_MONEY_SEED )
Cash.nSeedPoint = nSeedPoint;
#endif
Cash.cPackageCount = cPackageCount;
if (PackageList) memcpy(Cash.GiftList, PackageList, sizeof(TCashPackageGiftItem) * cPackageCount);
int nLen = sizeof(TACashPackageGift) - sizeof(Cash.GiftList) + (sizeof(TCashPackageGiftItem) * cPackageCount);
AddSendData(MAINCMD_CASH, CASH_PACKAGEGIFT, (char*)&Cash, nLen);
}
void CDNConnection::SendCoupon(UINT nAccountDBID, int nResult)
{
TACashCoupon Cash;
memset(&Cash, 0, sizeof(Cash));
Cash.nAccountDBID = nAccountDBID;
Cash.nResult = nResult;
AddSendData(MAINCMD_CASH, CASH_COUPON, (char*)&Cash, sizeof(TACashCoupon));
}
void CDNConnection::SendVIPBuy(UINT nAccountDBID, int nResult, int nPetal, int nCash, int nItemSN, int nVIPTotalPoint, __time64_t tVIPEndDate, bool bAutoPay, bool bServerBuy, INT64 nSeedPoint)
{
TACashVIPBuy Cash;
memset(&Cash, 0, sizeof(Cash));
Cash.nAccountDBID = nAccountDBID;
Cash.nResult = nResult;
Cash.nPetal = nPetal;
Cash.nCash = nCash;
Cash.nItemSN = nItemSN;
Cash.nVIPTotalPoint = nVIPTotalPoint;
Cash.tVIPEndDate = tVIPEndDate;
Cash.bAutoPay = bAutoPay;
Cash.bServer = bServerBuy;
#if defined( PRE_ADD_NEW_MONEY_SEED )
Cash.nSeedPoint = nSeedPoint;
#endif
AddSendData(MAINCMD_CASH, CASH_VIPBUY, (char*)&Cash, sizeof(TACashVIPBuy));
}
void CDNConnection::SendVIPGift(UINT nAccountDBID, int nResult, int nPetal, int nCash, int nItemSN, UINT nReceiverAccountDBID, INT64 biReceiverCharacterDBID, int nReceiverGiftCount, INT64 nSeedPoint)
{
TACashVIPGift Cash;
memset(&Cash, 0, sizeof(Cash));
Cash.nAccountDBID = nAccountDBID;
Cash.nResult = nResult;
Cash.nPetal = nPetal;
Cash.nCash = nCash;
Cash.nItemSN = nItemSN;
Cash.nReceiverAccountDBID = nReceiverAccountDBID;
Cash.biReceiverCharacterDBID = biReceiverCharacterDBID;
Cash.nReceiverGiftCount = nReceiverGiftCount;
#if defined( PRE_ADD_NEW_MONEY_SEED )
Cash.nSeedPoint = nSeedPoint;
#endif
AddSendData(MAINCMD_CASH, CASH_VIPGIFT, (char*)&Cash, sizeof(TACashVIPGift));
}
#if defined(PRE_ADD_CASH_REFUND)
void CDNConnection::SendMoveCashInven(UINT nAccountDBID, int nResult, int nTotalPetal, INT64 biPurchaseOrderDetailID, TCashItemBase* pCashItem, INT64 nSeedPoint)
{
TACashMoveCashInven Cash;
memset(&Cash, 0, sizeof(TACashMoveCashInven));
Cash.nAccountDBID = nAccountDBID;
Cash.nResult = nResult;
Cash.nTotalPetal = nTotalPetal;
Cash.biPurchaseOrderDetailID = biPurchaseOrderDetailID;
#if defined( PRE_ADD_NEW_MONEY_SEED )
Cash.nTotalSeed = nSeedPoint;
#endif
if( pCashItem )
memcpy( &Cash.CashItem, pCashItem, sizeof(TCashItemBase));
AddSendData(MAINCMD_CASH, CASH_MOVE_CASHINVEN, (char*)&Cash, sizeof(TACashMoveCashInven));
}
void CDNConnection::SendPackageMoveCashInven(UINT nAccountDBID, int nResult, int nTotalPetal, INT64 biPurchaseOrderDetailID, TCashItemBase* pCashItemList, INT64 nSeedPoint)
{
TACashPackageMoveCashInven Cash;
memset(&Cash, 0, sizeof(TACashPackageMoveCashInven));
Cash.nAccountDBID = nAccountDBID;
Cash.nResult = nResult;
Cash.nTotalPetal = nTotalPetal;
Cash.biPurchaseOrderDetailID = biPurchaseOrderDetailID;
#if defined( PRE_ADD_NEW_MONEY_SEED )
Cash.nTotalSeed = nSeedPoint;
#endif
if( pCashItemList )
memcpy( &Cash.CashItemList, pCashItemList, sizeof(Cash.CashItemList));
AddSendData(MAINCMD_CASH, CASH_PACKAGE_MOVE_CASHINVEN, (char*)&Cash, sizeof(TACashPackageMoveCashInven));
}
void CDNConnection::SendCashRefund(UINT nAccountDBID, int nResult, char cItemType, INT64 biPurchaseOrderDetailID)
{
TACashRefund Cash;
memset(&Cash, 0, sizeof(TACashRefund));
Cash.nAccountDBID = nAccountDBID;
Cash.nResult = nResult;
Cash.cItemType = cItemType;
Cash.biPurchaseOrderDetailID = biPurchaseOrderDetailID;
AddSendData(MAINCMD_CASH, CASH_REFUNDCASH, (char*)&Cash, sizeof(TACashRefund));
}
#endif