#pragma once #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST) #if defined (_WIN64) typedef LONGLONG USER_REQUEST; #else typedef LONG USER_REQUEST; #endif // #if defined (_WIN64) const USER_REQUEST CASH_NO_REQUESTING = 0; const USER_REQUEST CASH_REQUESTING = 1; void ReleaseExchange(USER_REQUEST volatile* pDestination); class CRequestReleaser { public: CRequestReleaser(USER_REQUEST& requesting) : m_Requesting(requesting) { _ASSERT(m_Requesting == CASH_REQUESTING); m_Lock = false; } ~CRequestReleaser() { if (!m_Lock) ReleaseExchange(&m_Requesting); } public: void Lock() { m_Lock = true; } private: USER_REQUEST& m_Requesting; bool m_Lock; }; #endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST) // village, gameÀ¸·Î º¸³¾ µ¥ÀÌÅ͵é billing°¬´Ù¿Ã »çÀÌ¿¡ Àá½Ã ÀúÀåÇÏ´Â ÀúÀå¼Ò¶ó°í³ª ÇÒ±î?;; class CDNSQLWorld; class CDNSQLMembership; class CDNConnection; class CDNUserRepository { public: struct TBuyItem { TCashBuyItem BuyItem; int nReservePetal; int nPrice; int nLimitCount; #if defined( PRE_ADD_NEW_MONEY_SEED ) int nSeedPoint; #endif int nProductNo; INT64 biPurchaseOrderDetailID; // ¿ì¸®²¨ »óǰº° ID }; struct TGiftItem { TCashGiftItem GiftItem; INT64 biPurchaseOrderID; // ¿ì¸®²¨ int nReservePetal; int nPrice; int nLimitCount; // Nexon int nProductNo; int nOrderStep; // eSndaOrderStep, gash #if defined( PRE_ADD_NEW_MONEY_SEED ) int nSeedPoint; #endif }; struct TVIPItem { int nItemSN; INT64 biPurchaseOrderID; // ¿ì¸®²¨ int nPrice; int nLimitCount; int nOrderStep; // eSndaOrderStep }; // ¼¢´Ù¿ë #if defined(_CH) || defined(_EU) struct TBuyItemPart { TBuyItem *pPartItem[MAX_GOOD_LEN]; INT64 biPurchaseOrderID; // ¿ì¸®²¨ int nOrderStep; // eSndaOrderStep char context_id[MAX_ORDERID_LEN+1]; // ¼¢´Ù ¹®¸Æ ID (ÁÖ¹® ´ç Çѹø, GetNewId() ¸¦ »ç¿ëÇÏ¿© »ý¼º) // °³º° »óǰ // °¢ AccountLock / AccountUnlock Request ½Ã ÇÑ ½ÖÀ¸·Î À¯ÁöµÇ¾î¾ß ÇÔ. }; struct TGiftItemPart { TGiftItem *pPartItem[MAX_GOOD_LEN]; int nOrderStep; // eSndaOrderStep char context_id[MAX_ORDERID_LEN+1]; // ¼¢´Ù ¹®¸Æ ID (ÁÖ¹® ´ç Çѹø, GetNewId() ¸¦ »ç¿ëÇÏ¿© »ý¼º) // °³º° »óǰ // °¢ AccountLock / AccountUnlock Request ½Ã ÇÑ ½ÖÀ¸·Î À¯ÁöµÇ¾î¾ß ÇÔ. }; #endif // #if defined(_CH) || defined(_EU) private: UINT m_nAccountDBID; char m_szAccountName[IDLENMAX]; WCHAR m_wszAccountName[IDLENMAX]; char m_szCharacterName[NAMELENMAX]; WCHAR m_wszCharacterName[NAMELENMAX]; INT64 m_biCharacterDBID; CDNConnection *m_pConnection; int m_nThreadID; char m_cWorldSetID; int m_nMapID; int m_nChannelID; int m_nSubCommand; // Nexon UINT m_nNexonSN; char m_cPaymentRules; // Cash::PaymentRules // Shanda #if defined(_CH) || defined(_EU) char m_sess_id[MAX_SESSID_LEN+1]; // ¼¢´Ù ¼¼¼Ç ID (¼¼¼Ç ´ç Çѹø, GetNewId() ¸¦ »ç¿ëÇÏ¿© »ý¼º) // °¢ »ç¿ëÀÚ º° 1ȸÀÇ ·Î±×ÀÎ °úÁ¤¿¡ ÇØ´ç ÇÊµå ³»¿ëÀÌ ÀÏÄ¡Çϵµ·Ï ÇØ¾ß ÇÔ. char m_context_id[MAX_ORDERID_LEN+1]; // ¼¢´Ù ¹®¸Æ ID (ÁÖ¹® ´ç Çѹø, GetNewId() ¸¦ »ç¿ëÇÏ¿© »ý¼º) // ÆÐŰÁö »óǰ/¼±¹° // °¢ AccountLock / AccountUnlock Request ½Ã ÇÑ ½ÖÀ¸·Î À¯ÁöµÇ¾î¾ß ÇÔ. int m_nOrderStep; // eSndaOrderStep / eGashOrderStep #endif // #if defined(_CH) || defined(_EU) int m_nPickupCount; bool m_bOpen; #if defined( PRE_ADD_NEW_MONEY_SEED ) INT64 m_nSeedPoint; #endif bool m_bPCBang; char m_cBuyCartType; // ±¸¸Å īƮ ŸÀÔ char m_cGiftCartType; // ¼±¹° īƮ ŸÀÔ int m_nPackageSN; INT64 m_biPurchaseOrderID; // ¿ì¸®²¨ #if defined(PRE_ADD_CASH_REFUND) INT64 m_biPurchaseOrderDetailID; // ¿ì¸®²¨ #endif INT64 m_biCouponOrderID; // ¿ì¸®²¨ int m_nCouponSN; TCashItemBase m_ProductPackageList[PACKAGEITEMMAX]; TCashPackageGiftItem m_GiftPackageList[PACKAGEITEMMAX]; #if defined(PRE_ADD_CASH_REFUND) bool m_bCashMoveInven; #endif #if defined(PRE_ADD_SALE_COUPON) INT64 m_biSaleCouponSerial; #endif #if defined(PRE_ADD_CADGE_CASH) int m_nMailDBID; #endif // #if defined(PRE_ADD_CADGE_CASH) public: char m_cCurProductCount; char m_cProductCount; std::vector m_VecBuyItemList; std::vector m_VecGiftItemList; #if defined(_CH) || defined(_EU) int m_nPartCount; std::vector m_VecBuyItemPartList; // Áß±¹Àº 5°³¾¿ ¹­¾î¼­ º¸³»¾ßÇØ¼­ Çϳª ´õ ¸¸µç´Ù. (¸Ó ÀÌ·¯³Ä..) std::vector m_VecGiftItemPartList; // Áß±¹Àº 5°³¾¿ ¹­¾î¼­ º¸³»¾ßÇØ¼­ Çϳª ´õ ¸¸µç´Ù. (¸Ó ÀÌ·¯³Ä..) #endif // _CH #if defined(PRE_ADD_CASH_REFUND) TPaymentItemInfoEx m_PaymentItem[PREVIEWCARTLISTMAX]; TPaymentPackageItemInfoEx m_PaymentPackageItem; char m_cRefundType; #endif char m_cAge; UINT m_nIp; char m_szIp[IPLENMAX]; WCHAR m_wszIp[IPLENMAX]; WCHAR m_wszReceiverCharacterName[NAMELENMAX]; char m_szReceiverAccountName[IDLENMAX]; WCHAR m_wszMessage[GIFTMESSAGEMAX]; WCHAR m_wszCoupon[COUPONMAX]; char m_szCoupon[COUPONMAX]; // ´ë¸¸, ½Ì°¡ÆúÀº charÇüÀ¸·Î º¯È¯Çؼ­ ÀúÀå int m_nTotalPrice; int m_nUsedPaidCash; TVIPItem m_VIP; bool m_bAutoPay; bool m_bServer; #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST) USER_REQUEST m_Requesting; #endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST) private: void Clear(); public: CDNUserRepository(void); ~CDNUserRepository(void); void SetAccountDBID(UINT nAccountDBID) { m_nAccountDBID = nAccountDBID; } UINT GetAccountDBID() { return m_nAccountDBID; } void SetAccountName(char *pName) { _strcpy(m_szAccountName, _countof(m_szAccountName), pName, (int)strlen(pName)); } char *GetAccountName() { return m_szAccountName; } WCHAR *GetAccountNameW() { return m_wszAccountName; } char *GetCharacterName() { return m_szCharacterName; } WCHAR *GetCharacterNameW() { return m_wszCharacterName; } INT64 GetCharacterDBID() { return m_biCharacterDBID; } char GetWorldID() { return m_cWorldSetID; } int GetMapID() { return m_nMapID; } int GetChannelID() { return m_nChannelID; } void SetReceiverAccountName(); char *GetReceiverAccountName() { return m_szReceiverAccountName; } WCHAR *GetReceiverCharacterNameW() { return m_wszReceiverCharacterName; } char *GetCoupon() { return m_szCoupon; } WCHAR *GetCouponW() { return m_wszCoupon; } CDNConnection * GetConnection() { return m_pConnection; } int GetThreadID() { return m_nThreadID; } UINT GetNexonSN() { return m_nNexonSN; } char GetPaymentRules() { return m_cPaymentRules; } #if defined(_CH) || defined(_EU) char* SetSessId() { return m_sess_id; } const char* GetSessId() const { return m_sess_id; } int GetSessIdCnt() const { return(static_cast(_countof(m_sess_id))); } void SetContextId(char *pContext) { _strcpy(m_context_id, _countof(m_context_id), pContext, (int)strlen(pContext)); } // pRes->order_id ´Â AccountLock / AccountUnlock ½Ã ¸¶´Ù º¯ÇϹǷΠ´ë½Å pRes->context_id ¸¦ »ç¿ë const char* GetContextId() const { return m_context_id; } int GetContextIdCnt() const { return(static_cast(_countof(m_context_id))); } void SetOrderStep(int nOrderStep) { m_nOrderStep = nOrderStep; } int GetOrderStep() const { return m_nOrderStep; } CDNUserRepository::TBuyItemPart *GetBuyItemPart(); // ÇöÀç pickupcount¿¡ ÇØ´çÇÏ´Â µ¥ÀÌÅÍ Ã£±â CDNUserRepository::TGiftItemPart *GetGiftItemPart(); // ÇöÀç pickupcount¿¡ ÇØ´çÇÏ´Â µ¥ÀÌÅÍ Ã£±â int CheckSessID(); #endif // #if defined(_CH) || defined(_EU) bool IsOpen() { return m_bOpen; } bool IsPCBang() { return m_bPCBang; } char GetBuyCartType() { return m_cBuyCartType; } // ±¸¸Å īƮ ŸÀÔ int GetPackageSN() { return m_nPackageSN; } void SetPurchaseOrderID(INT64 biPurchaseOrderID) { m_biPurchaseOrderID = biPurchaseOrderID; } INT64 GetPurchaseOrderID() const { return m_biPurchaseOrderID; } int GetSubCommand() { return m_nSubCommand; } void SetPurchaseOrderDetailID(const char* pPurchaseOrderDetailIDs); int GetPetalBalance(); CDNSQLMembership *GetMembershipDB(); CDNSQLWorld *GetWorldDB(); bool SetBuyItem(TCashBuyItem &Item); void SetBuyItemPartByShanda(int nStartIndex, int nEndIndex, INT64 biOrderID, const char* pPurchaseOrderDetailIDs); CDNUserRepository::TBuyItem *GetBuyItem(int nIndex); bool SetGiftItem(TCashGiftItem &Item); void SetGiftItemPartByShanda(); void SetGiftItemPurchaseOrderID(int nIndex, INT64 biPurchaseOrderID); CDNUserRepository::TGiftItem *GetGiftItem(int nIndex); void SetBalanceInquiry(int nThreadID, CDNConnection *pConnection, TQCashBalanceInquiry *pCash); bool SetBuy(int nThreadID, CDNConnection *pConnection, TQCashBuy *pCash); void SetPackageBuy(int nThreadID, CDNConnection *pConnection, TQCashPackageBuy *pCash); bool SetGift(int nThreadID, CDNConnection *pConnection, TQCashGift *pCash); void SetPackageGift(int nThreadID, CDNConnection *pConnection, TQCashPackageGift *pCash); void SetCoupon(int nThreadID, CDNConnection *pConnection, TQCashCoupon *pCash); void SetVIPBuy(int nThreadID, CDNConnection *pConnection, TQCashVIPBuy *pCash); void SetVIPGift(int nThreadID, CDNConnection *pConnection, TQCashVIPGift *pCash); void SetRefund(int nThreadID, CDNConnection *pConnection, TQCashRefund* pCash); int OnBalanceInquiry(int nThreadID, CDNConnection *pConnection, TQCashBalanceInquiry *pCash); int OnBuy(int nThreadID, CDNConnection *pConnection, TQCashBuy *pCash); int OnPackageBuy(int nThreadID, CDNConnection *pConnection, TQCashPackageBuy *pCash); int OnGift(int nThreadID, CDNConnection *pConnection, TQCashGift *pCash); int OnPackageGift(int nThreadID, CDNConnection *pConnection, TQCashPackageGift *pCash); int OnCoupon(int nThreadID, CDNConnection *pConnection, TQCashCoupon *pCash); int OnVIPBuy(int nThreadID, CDNConnection *pConnection, TQCashVIPBuy *pCash); int OnVIPGift(int nThreadID, CDNConnection *pConnection, TQCashVIPGift *pCash); void OnRefund(int nThreadID, CDNConnection *pConnection, TQCashRefund* pCash); void OnMoveCashInven(int nThreadID, CDNConnection *pConnection, TQCashMoveCashInven* pCash); void OnPackageMoveCashInven(int nThreadID, CDNConnection *pConnection, TQCashPackageMoveCashInven* pCash); int CalcPackageProcess(); bool OnRecvBillingCoupon(int nBillingResult, int nResult, int nItemSN, UINT nOrderNo); // Çѱ¹, ¹Ì±¹ Àü¿ë void OnRecvBillingPurchase(int nResult, int nBillingResult, UINT nOrderNo, char *pNexonOrderID); // purchase item ÀÀ´äÀ¸·Î orderno¸¦ ¹Þ´Â°Å ¼¼ÆÃÇØÁØ´Ù // ±âŸ ±¹°¡..(Áß±¹, ÀϺ» Á¦¿Ü) void OnRecvBillingBuyItem(int nBillingResult, UINT nOrderNo=0, bool bCart=false); // Àå¹Ù±¸´Ï ±â´É On,Off(Off¸é ¿©·¯¹ø º¸³¿) #if defined(_CH) || defined(_EU) int GetTotalPetalBuyPartList(); void SetSuccessBuyPartList(); void SetOrderStepBuyPartList(int nOrderStep); void SetSuccessGiftPartList(); void SetOrderStepGiftPartList(int nOrderStep); void OnRecvAccountLock(int nBillingResult, char *pBillingContextID); void OnRecvAccountUnlock(int nBillingResult, char *pBillingContextID, char *pBillingOrderID, int nBalance); #endif // #if defined(_CH) || defined(_EU) // ConnectionÀ¸·Î SendÇϱâ.. void SendBalanceInquiry(int nResult, int nCashBalance, int nNotRefundableBalance = 0); #ifdef PRE_ADD_LIMITED_CASHITEM void SendBuyGift(int nResult, bool bUpdateLimitedCount = false); #else //#ifdef PRE_ADD_LIMITED_CASHITEM void SendBuyGift(int nResult); #endif //#ifdef PRE_ADD_LIMITED_CASHITEM #if defined(_TW) void SendCoupon(int nResult, bool bGashSend=true); #else void SendCoupon(int nResult); #endif // #if defined(_TW) void SendVIPBuyGift(int nResult, int nCash); #if defined(PRE_ADD_CASH_REFUND) void SendCashRefund(int nResult); void OnRecvBillingRefund(int nResult); inline bool GetCashMoveInven() { return m_bCashMoveInven; }; inline void SetCashMoveInven(bool bCashMoveInven) { m_bCashMoveInven = bCashMoveInven; }; #endif int PurchaseItemByPetal(); #if defined( PRE_ADD_NEW_MONEY_SEED ) int PurchaseItemBySeed(); #endif int AddPurchaseOrderByCash(int nIndex); int PurchaseBuyItem(); int PurchaseGiftItem(); // ¾È¿¡¼­ CashItemDBQuery ó¸®.. Çѹø ´õ °¨½ÕÀ½ int CashItemDBProcess(int nWorldSetID, int nAccountDBID, INT64 biCharacterDBID, int nMapID, int nChannelID, char cPaymentRules, TCashItemBase &BuyItem, int nPrice, INT64 biPurchaseOrderID, int nAddMaterializedItemCode, INT64 biSenderCharacterDBID = 0, bool bGift = false, char cPayMethodCode = DBDNWorldDef::PayMethodCode::Cash); bool CheckSaleItemSN(int nItemSN); #if defined(PRE_MOD_SELECT_CHAR) int CheckCharacterSlotCount(int nAccountDBID, int nAddCount); #else // #if defined(PRE_MOD_SELECT_CHAR) int CheckCharacterSlotCount(INT64 biCharacterDBID, int nAddCount); #endif // #if defined(PRE_MOD_SELECT_CHAR) void AppendItemString(int nStartIndex, int nEndIndex, std::vector &VecItemString); void SetUsedPaidCash(LPCWSTR pReservedFields); #if defined( PRE_ADD_NEW_MONEY_SEED ) INT64 GetSeedPoint(); int AddSeedPoint( int nSeedPoint ); int UseSeedPoint(); #endif };