Files
Sun1602/Server/AuthSystem/include/ClientStub/ShopEventHandler.h
T
2022-10-26 12:25:11 +08:00

1123 lines
31 KiB
C++

#pragma once
/**************************************************************************************************
작성일: 2008-07-08
설명: 샵 서버를 사용하는 클라이언트에게 수신된 패킷을 전달해 주기 위한 이벤트 객체
이벤트를 받는쪽(샵클라이언트)에서 상속받아 사용해야 한다.
**************************************************************************************************/
#include "ClientSession.h"
#include <public/protocol_shop.h>
class CShopEventHandler : public CClientSession
{
public:
CShopEventHandler(void);
virtual ~CShopEventHandler(void);
// 초기화 함수 (프로그램 실행하고 한번만 사용해야 한다.)
bool CreateSession(WBANetwork::LPFN_ErrorHandler errhandler = NULL);
// 캐시조회
// 캐시조회 : MU_KR, BT_KR, R2_KR, SUN_KR
bool InquireCash(
long GameCode,
BYTE ViewType,
DWORD AccountSeq,
bool SumOnly,
long MileageSection);
// 캐시조회 : MU_GB, SUN_GB
bool InquireCash(
BYTE ViewType,
DWORD AccountSeq,
long GameCode,
bool SumOnly,
long MileageSection);
// 캐시조회 : SUN_CN, SUN_RU, SUN_JP, BT_TH, BT_CN, MU_JP(GameChu, GameOn), MU_VN, MU_TW
bool InquireCash(
long GameCode,
ShopProtocol::PaymentType PaymentType,
long AccountSeq,
int USN,
BYTE ViewType,
long MileageSection,
bool SumOnly);
// 캐시조회 : MU_TH
bool InquireCash(
long GameCode,
ShopProtocol::PaymentType PaymentType,
DWORD AccountSeq,
char AccountID[MAX_ACCOUNTID_LENGTH],
BYTE ViewType,
long MileageSection,
bool SumOnly);
// 캐시조회 : BT_CNL
bool InquireCash(
long GameCode,
ShopProtocol::PaymentType PaymentType,
DWORD AccountSeq,
char AccountID[MAX_ACCOUNTID_LENGTH],
BYTE ViewType,
long MileageSection,
bool SumOnly,
WCHAR strMemberNo[MAX_CHANNELING_LENGTH]);
// 상품구매
// [deprecated] - [AccessIP 추가 버전] 사용 권장
// 상품구매 : MU_KR, BT_KR, R2_KR, SUN KR
bool BuyProduct(
long GameCode,
DWORD AccountSeq,
long PackageProductSeq,
long ProductDisplaySeq,
long SalesZone,
long PriceSeq,
long Class,
long Level,
WCHAR CharName[MAX_CHARACTERID_LENGTH],
WCHAR Rank[MAX_RANK_LENGTH],
long ServerIndex);
// [AccessIP 추가 버전]
// 상품구매 : MU_KR, BT_KR, R2_KR, SUN KR
bool BuyProduct(
long GameCode,
DWORD AccountSeq,
long PackageProductSeq,
long ProductDisplaySeq,
long SalesZone,
long PriceSeq,
long Class,
long Level,
DWORD AccessIP, // <----- AccessIP 추가 버전
WCHAR CharName[MAX_CHARACTERID_LENGTH],
WCHAR Rank[MAX_RANK_LENGTH],
long ServerIndex);
// [deprecated] - [DeductMileageFlag & AccessIP 추가 버전] 사용 권장
bool BuyProduct(
DWORD AccountSeq,
long GameCode,
long PackageProductSeq,
long PriceSeq,
long SalesZone,
long ProductDisplaySeq,
long Class,
long Level,
WCHAR CharName[MAX_CHARACTERID_LENGTH],
WCHAR Rank[MAX_RANK_LENGTH],
long ServerIndex,
int CashTypeCode);
// [deprecated] - [DeductMileageFlag & AccessIP 추가 버전] 사용 권장
bool BuyProduct(
DWORD AccountSeq,
long GameCode,
long PackageProductSeq,
long PriceSeq,
long SalesZone,
long ProductDisplaySeq,
long Class,
long Level,
WCHAR CharName[MAX_CHARACTERID_LENGTH],
WCHAR Rank[MAX_RANK_LENGTH],
long ServerIndex,
int CashTypeCode,
bool DeductMileageFlag); // <----- DeductMileageFlag 추가
// [DeductMileageFlag & AccessIP 추가 버전]
// 상품구매 : MU_GB, SUN_GB
bool BuyProduct(
DWORD AccountSeq,
long GameCode,
long PackageProductSeq,
long PriceSeq,
long SalesZone,
long ProductDisplaySeq,
long Class,
long Level,
WCHAR CharName[MAX_CHARACTERID_LENGTH],
WCHAR Rank[MAX_RANK_LENGTH],
long ServerIndex,
int CashTypeCode,
bool DeductMileageFlag, // <----- DeductMileageFlag 추가
DWORD AccessIP);
// 상품구매 : SUN_CN, SUN_RU, SUN_JP, MU_JP(GameChu, GameOn), MU_VN, MU_TW
bool BuyProduct(
long GameCode,
ShopProtocol::PaymentType PaymentType,
DWORD AccountSeq,
int USN,
long PackageProductSeq,
long PriceSeq,
long SalesZone,
long ProductDisplaySeq,
long Class,
long Level,
WCHAR CharName[MAX_CHARACTERID_LENGTH],
WCHAR Rank[MAX_RANK_LENGTH],
long ServerIndex,
DWORD dwIPAddress,
bool DeductMileageFlag);
// 상품구매 : BT_TH, BT_CN
bool BuyProduct(
long GameCode,
ShopProtocol::PaymentType PaymentType,
DWORD AccountSeq,
int USN, // BT_CN : tencent qq 계정번호
long PackageProductSeq,
long PriceSeq,
long SalesZone,
long ProductDisplaySeq,
long Class,
long Level,
WCHAR CharName[MAX_CHARACTERID_LENGTH],
WCHAR Rank[MAX_RANK_LENGTH],
long ServerIndex,
DWORD dwIPAddress,
bool DeductMileageFlag,
double ItemUniqueID); // OnBuyProduct로 돌려줌
// 상품구매 : MU_TH
bool BuyProduct(
long GameCode,
ShopProtocol::PaymentType PaymentType,
DWORD AccountSeq,
char AccountID[MAX_ACCOUNTID_LENGTH],
long PackageProductSeq,
long PriceSeq,
long SalesZone,
long ProductDisplaySeq,
long Class,
long Level,
WCHAR CharName[MAX_CHARACTERID_LENGTH],
WCHAR Rank[MAX_RANK_LENGTH],
long ServerIndex,
DWORD dwIPAddress,
char RefKey[MAX_TYPENAME_LENGTH],
bool DeductMileageFlag);
// [deprecated] - [AccessIP 추가 버전] 사용 권장
// 상품구매 : BT_CNL
bool BuyProduct(
long GameCode,
ShopProtocol::PaymentType PaymentType,
DWORD AccountSeq,
char AccountID[MAX_ACCOUNTID_LENGTH],
long PackageProductSeq,
long PriceSeq,
long SalesZone,
long ProductDisplaySeq,
long Class,
long Level,
WCHAR CharName[MAX_CHARACTERID_LENGTH],
WCHAR Rank[MAX_RANK_LENGTH],
long ServerIndex,
DWORD dwIPAddress,
char RefKey[MAX_TYPENAME_LENGTH],
bool DeductMileageFlag,
WCHAR strMemberNo[MAX_CHANNELING_LENGTH]);
// [AccessIP 추가 버전]
// 상품구매 : BT_CNL
bool BuyProduct(
long GameCode,
ShopProtocol::PaymentType PaymentType,
DWORD AccountSeq,
char AccountID[MAX_ACCOUNTID_LENGTH],
long PackageProductSeq,
long PriceSeq,
long SalesZone,
long ProductDisplaySeq,
long Class,
long Level,
WCHAR CharName[MAX_CHARACTERID_LENGTH],
WCHAR Rank[MAX_RANK_LENGTH],
long ServerIndex,
DWORD dwIPAddress,
char RefKey[MAX_TYPENAME_LENGTH],
bool DeductMileageFlag,
WCHAR strMemberNo[MAX_CHANNELING_LENGTH],
DWORD AccessIP); // <----- AccessIP 추가 버전
// 상품선물
// [deprecated] - [AccessIP 추가 버전] 사용 권장
// 상품 선물 : MU_KR, BT_KR, R2_KR, SUN_KR
bool GiftProduct(
long GameCode,
DWORD SenderSeq,
long SenderServerIndex,
WCHAR SenderCharName[MAX_CHARACTERID_LENGTH],
DWORD ReceiverSeq,
long ReceiverServerIndex,
WCHAR ReceiverCharName[MAX_CHARACTERID_LENGTH],
WCHAR Message[MAX_MESSAGE_LENGTH],
long PackageProductSeq,
long PriceSeq,
long SalesZone,
long ProductDisplaySeq);
// [AccessIP 추가 버전]
// 상품선물 : MU_KR, BT_KR, R2_KR, SUN_KR
bool GiftProduct(
long GameCode,
DWORD SenderSeq,
long SenderServerIndex,
WCHAR SenderCharName[MAX_CHARACTERID_LENGTH],
DWORD ReceiverSeq,
long ReceiverServerIndex,
WCHAR ReceiverCharName[MAX_CHARACTERID_LENGTH],
WCHAR Message[MAX_MESSAGE_LENGTH],
long PackageProductSeq,
long PriceSeq,
long SalesZone,
long ProductDisplaySeq,
DWORD AccessIP); // <----- AccessIP 추가 버전
// [deprecated] - [DeductMileageFlag & AccessIP 추가 버전] 사용 권장
// 상품선물 : MU_GB
bool GiftProduct(
DWORD SenderAccountSeq,
WCHAR SenderCharName[MAX_CHARACTERID_LENGTH],
long SenderServerIndex,
DWORD ReceiverAccountSeq,
WCHAR ReceiverCharName[MAX_CHARACTERID_LENGTH],
long ReceiverServerIndex,
WCHAR SendMessage[MAX_MESSAGE_LENGTH],
long GameCode,
long PackageProductSeq,
long PriceSeq,
long SalesZone,
long ProductDisplaySeq,
int CashTypeCode);
// [deprecated] - [DeductMileageFlag & AccessIP 추가 버전] 사용 권장
// 상품선물 : MU_GB, SUN_GB
bool GiftProduct(
DWORD SenderAccountSeq,
WCHAR SenderCharName[MAX_CHARACTERID_LENGTH],
long SenderServerIndex,
DWORD ReceiverAccountSeq,
WCHAR ReceiverCharName[MAX_CHARACTERID_LENGTH],
long ReceiverServerIndex,
WCHAR SendMessage[MAX_MESSAGE_LENGTH],
long GameCode,
long PackageProductSeq,
long PriceSeq,
long SalesZone,
long ProductDisplaySeq,
int CashTypeCode,
bool DeductMileageFlag); // <----- DeductMileageFlag 추가
// [DeductMileageFlag & AccessIP 추가 버전]
// 상품선물 : MU_GB, SUN_GB
bool GiftProduct(
DWORD SenderAccountSeq,
WCHAR SenderCharName[MAX_CHARACTERID_LENGTH],
long SenderServerIndex,
DWORD ReceiverAccountSeq,
WCHAR ReceiverCharName[MAX_CHARACTERID_LENGTH],
long ReceiverServerIndex,
WCHAR SendMessage[MAX_MESSAGE_LENGTH],
long GameCode,
long PackageProductSeq,
long PriceSeq,
long SalesZone,
long ProductDisplaySeq,
int CashTypeCode,
bool DeductMileageFlag, // <----- DeductMileageFlag 추가
DWORD AccessIP); // <----- AccessIP 추가(client ip)
// 상품선물 : SUN_CN, SUN_RU, SUN_JP, MU_JP(GameChu, GameOn), MU_VN, MU_TW
bool GiftProduct(
long GameCode,
ShopProtocol::PaymentType PaymentType,
DWORD AccountSeq,
int USN,
WCHAR CharName[MAX_CHARACTERID_LENGTH],
long ServerIndex,
DWORD ReceiverAccountSeq,
WCHAR ReceiverCharName[MAX_CHARACTERID_LENGTH],
long ReceiverServerIndex,
WCHAR Message[MAX_MESSAGE_LENGTH],
long PackageProductSeq,
long PriceSeq,
long SalesZone,
long ProductDisplaySeq,
DWORD dwIPAddress,
bool DeductMileageFlag);
// 상품선물 : BT_TH, BT_CN
bool GiftProduct(
long GameCode,
ShopProtocol::PaymentType PaymentType,
DWORD SenderAccountSeq,
int USN, // BT_CN : tencent qq 계정번호
WCHAR SenderAccountID[MAX_ACCOUNTID_LENGTH],
WCHAR SenderCharName[MAX_CHARACTERID_LENGTH],
long SenderServerIndex,
DWORD ReceiverAccountSeq,
WCHAR ReceiverAccountID[MAX_ACCOUNTID_LENGTH],
WCHAR ReceiverCharName[MAX_CHARACTERID_LENGTH],
long ReceiverServerIndex,
long ReceiverClass, // <-- 보관함 사용을 처리해주기 위해 필요
long ReceiverLevel, // <-- 보관함 사용을 처리해주기 위해 필요
WCHAR ReceiverRank[MAX_RANK_LENGTH], // <-- 보관함 사용을 처리해주기 위해 필요
WCHAR Message[MAX_MESSAGE_LENGTH],
long PackageProductSeq,
long PriceSeq,
long SalesZone,
long ProductDisplaySeq,
DWORD IPAddress,
bool DeductMileageFlag);
// 상품선물 : MU_TH
bool GiftProduct(
long GameCode,
ShopProtocol::PaymentType PaymentType,
DWORD AccountSeq,
char AccountID[MAX_ACCOUNTID_LENGTH],
WCHAR CharName[MAX_CHARACTERID_LENGTH],
long ServerIndex,
DWORD ReceiverAccountSeq,
char ReceiverAccountID[MAX_ACCOUNTID_LENGTH],
WCHAR ReceiverCharName[MAX_CHARACTERID_LENGTH],
long ReceiverServerIndex,
WCHAR Message[MAX_MESSAGE_LENGTH],
long PackageProductSeq,
long PriceSeq,
long SalesZone,
long ProductDisplaySeq,
DWORD dwIPAddress,
char RefKey[MAX_TYPENAME_LENGTH],
bool DeductMileageFlag);
// [deprecated] - [AccessIP 추가 버전] 사용 권장
// 상품선물 : BT_CNL
bool GiftProduct(
long GameCode,
ShopProtocol::PaymentType PaymentType,
DWORD AccountSeq,
char AccountID[MAX_ACCOUNTID_LENGTH],
WCHAR CharName[MAX_CHARACTERID_LENGTH],
long ServerIndex,
DWORD ReceiverAccountSeq,
char ReceiverAccountID[MAX_ACCOUNTID_LENGTH],
WCHAR ReceiverCharName[MAX_CHARACTERID_LENGTH],
long ReceiverServerIndex,
WCHAR Message[MAX_MESSAGE_LENGTH],
long PackageProductSeq,
long PriceSeq,
long SalesZone,
long ProductDisplaySeq,
DWORD dwIPAddress,
char RefKey[MAX_TYPENAME_LENGTH],
bool DeductMileageFlag,
WCHAR strMemberNo[MAX_CHANNELING_LENGTH]);
// [AccessIP 추가 버전]
// 상품선물 : BT_CNL
bool GiftProduct(
long GameCode,
ShopProtocol::PaymentType PaymentType,
DWORD AccountSeq,
char AccountID[MAX_ACCOUNTID_LENGTH],
WCHAR CharName[MAX_CHARACTERID_LENGTH],
long ServerIndex,
DWORD ReceiverAccountSeq,
char ReceiverAccountID[MAX_ACCOUNTID_LENGTH],
WCHAR ReceiverCharName[MAX_CHARACTERID_LENGTH],
long ReceiverServerIndex,
WCHAR Message[MAX_MESSAGE_LENGTH],
long PackageProductSeq,
long PriceSeq,
long SalesZone,
long ProductDisplaySeq,
DWORD dwIPAddress,
char RefKey[MAX_TYPENAME_LENGTH],
bool DeductMileageFlag,
WCHAR strMemberNo[MAX_CHANNELING_LENGTH],
DWORD AccessIP);
// 공통 서비스
// 상품 샵 스크립트 최신 버전 정보 조회 : 모든 게임
bool InquireSalesZoneScriptVersion(
long GameCode,
long SalesZone);
// 배너 스크립트 최신 버전 정보 조회 : 모든 게임
bool InquireBannerZoneScriptVersion(
long GameCode,
long BannerZone);
// [deprecated] 캐시선물 : 모든 게임, [AccessIP 추가 버전] 사용 권장
bool GiftCash(
DWORD SenderAccountSeq,
long SendServerIndex,
WCHAR SendCharName[MAX_CHARACTERID_LENGTH],
DWORD ReceiverAccountSeq,
long ReceiverServerIndex,
WCHAR ReceiverCharName[MAX_CHARACTERID_LENGTH],
WCHAR Message[MAX_MESSAGE_LENGTH],
double CashValue,
long GameCode);
// 캐시선물 : 모든 게임, [AccessIP 추가 버전]
bool GiftCash(
DWORD SenderAccountSeq,
long SendServerIndex,
WCHAR SendCharName[MAX_CHARACTERID_LENGTH],
DWORD ReceiverAccountSeq,
long ReceiverServerIndex,
WCHAR ReceiverCharName[MAX_CHARACTERID_LENGTH],
WCHAR Message[MAX_MESSAGE_LENGTH],
double CashValue,
long GameCode,
DWORD AccessIP); // <----- AccessIP 추가 버전
// 상품 구매/선물 가능 여부 조회 : 모든 게임
bool InquireBuyGiftPossibility(
DWORD AccountSeq,
long GameCode);
// 이벤트 상품 목록 조회 : 모든 게임
bool InquireEventProductList(
long GameCode,
DWORD AccountSeq,
long SalesZone,
long ProductDisplaySeq);
// 전시 상품 잔여 개수 조회 : 모든 게임
bool InquireProductLeftCount(
long GameCode,
long PackageSeq);
// [deprecated] 보관함 리스트 조회 : 모든 게임, InquireStorageListEx() 사용 권장
bool InquireStorageList(
DWORD AccountSeq,
long GameCode,
long SalesZone);
// [deprecated] 보관함 리스트 페이지 조회 : 모든 게임, InquireStorageListPageEx() 사용 권장
bool InquireStorageListPage(
DWORD AccountSeq,
int GameCode,
int SalesZone,
char StorageType,
int NowPage,
int PageSize);
// [deprecated] 보관함 리스트 페이지 조회(선물 메시지 제외) : 모든 게임, InquireStorageListPageNoGiftMessageEx() 사용 권장
bool InquireStorageListPageNoGiftMessage(
DWORD AccountSeq,
int GameCode,
int SalesZone,
char StorageType,
int NowPage,
int PageSize);
// 보관함 리스트를 조회(만료시점 추가) : 모든 게임
bool InquireStorageListEx(
DWORD AccountSeq,
long GameCode,
long SalesZone);
// 보관함 리스트 페이지를 조회(만료시점 추가) : 모든 게임
bool InquireStorageListPageEx(
DWORD AccountSeq,
int GameCode,
int SalesZone,
char StorageType,
int NowPage,
int PageSize);
// 보관함 리스트 페이지를 조회한다(선물 메시지 제외, 만료시점 추가) : 모든 게임
bool InquireStorageListPageNoGiftMessageEx(
DWORD AccountSeq,
int GameCode,
int SalesZone,
char StorageType,
int NowPage,
int PageSize);
// 보관함 상품 사용 : 모든 게임
bool UseStorage(
DWORD AccountSeq,
long GameCode,
DWORD IPAddress,
long StorageSeq,
long StorageItemSeq,
char StorageItemType,
long Class,
long Level,
WCHAR CharName[MAX_CHARACTERID_LENGTH],
WCHAR Rank[MAX_RANK_LENGTH],
long ServerIndex);
// 보관함 상품 사용 EX : SUN_GB
// 결과로 CashType을 추가 리턴함
bool UseStorageEx(
DWORD AccountSeq,
long GameCode,
DWORD IPAddress,
long StorageSeq,
long StorageItemSeq,
char StorageItemType,
long Class,
long Level,
WCHAR CharName[MAX_CHARACTERID_LENGTH],
WCHAR Rank[MAX_RANK_LENGTH],
long ServerIndex);
// 보관함 상품 사용 EX : SUN_CN
// 결과로 DeductMileageFlag를 추가 리턴함. (false : 캐시상품(0), true : 마일리지 상품(1))
bool UseStorageExDeductMileageFlag(
DWORD AccountSeq,
long GameCode,
DWORD IPAddress,
long StorageSeq,
long StorageItemSeq,
char StorageItemType,
long Class,
long Level,
WCHAR CharName[MAX_CHARACTERID_LENGTH],
WCHAR Rank[MAX_RANK_LENGTH],
long ServerIndex);
// 보관함 상품 사용하기 롤백 : 모든 게임
bool RollbackUseStorage(
DWORD AccountSeq,
long GameCode,
long StorageSeq,
long StorageItemSeq);
// 보관함 상품 버림 : 모든 게임
bool ThrowStorage(
DWORD AccountSeq,
long GameCode,
long StorageSeq,
long StorageItemSeq,
char StorageItemType);
// 마일리지 소진 : 모든 게임
bool MileageDeduct(
DWORD AccountSeq,
long GameCode,
long DeductCategory,
long MileageSection,
long MileageDeductPoint,
long Class,
long Level,
WCHAR CharName[MAX_CHARACTERID_LENGTH],
WCHAR Rank[MAX_RANK_LENGTH],
long ServerIndex);
// 마일리지 적립 : 모든 게임
bool MileageSave(
DWORD AccountSeq,
long GameCode,
long MileageType,
long MileageSection,
long MileagePoint,
long Class,
long Level,
WCHAR CharName[MAX_CHARACTERID_LENGTH],
WCHAR Rank[MAX_RANK_LENGTH],
long ServerIndex);
// 실시간 마일리지 적립 : 모든 게임
bool MileageLiveSaveUp(
DWORD AccountSeq,
long GameCode,
long MileageSection,
long SourceType);
// 아이템 시리얼 코드 업데이트 : 모든 게임
bool ItemSerialUpdate(
DWORD AccountSeq,
long GameCode,
long StorageSeq,
long StorageItemSeq,
INT64 InGameUseCode);
// 인게임 포인트 유형별 지급 퍼센트 조회 : 모든 게임
bool InquireInGamePointValue(
long GameCode,
long ServerType,
long AccessType);
// 캐시차감
// 해외 빌링시스템 연동시 차감만을 호출 : BT_TH
bool DeductCashOutbound(
long GameCode, // 게임코드
ShopProtocol::PaymentType PaymentType, // 결제 타입
DWORD TransactionID, // 트랜잭션 ID : 비동기 통신을 위함
DWORD AccountSeq, // 계정순번
WCHAR AccountID[MAX_ACCOUNTID_LENGTH], // 계정ID
WCHAR CharName[MAX_CHARNAME_LENGTH], // 캐릭터 명
DWORD AccessIP, // 클라이언트IP
DWORD DeductPrice, // 차감할 가격(이것이 핵심!)
DWORD ItemID, // 아이템 ID
DWORD ItemType, // 아이템 Type
WCHAR ItemName[MAX_PRODUCTNAME_LENGTH], // 아이템 이름
DWORD Period, // 주기 : 받기만 하고 결과로 돌려줌
double ItemUniqueID); // 아이템 유니크 ID : 받기만 하고 결과로 돌려줌
// 해외 빌링시스템 연동시 차감에 대한 롤백 : BT_TH
bool RollbackDeductCashOutbound(
long GameCode, // 게임코드
ShopProtocol::PaymentType PaymentType, // 결제 타입
DWORD TransactionID, // 트랜잭션 ID : 비동기 통신을 위함
DWORD AccountSeq, // 계정순번
INT64 DeductNo); // OnDeductCashOutbound()에서 리턴받은 차감번호(DeductNo)
// 해외 빌링시스템 연동시 차감만을 호출 : BT_CN
// 지정된 TimeOut 안에 CommitOrRollbackDeductCashOutbound() 의 IsCommit에 true로 호출해줘야 함
bool DeductCashOutbound(
long GameCode, // 게임코드
ShopProtocol::PaymentType PaymentType, // 결제 타입
DWORD TransactionID, // 트랜잭션 ID : 비동기 통신을 위함
DWORD AccountSeq, // 계정순번
WCHAR AccountID[MAX_ACCOUNTID_LENGTH], // 계정ID
int USN, // BT_CN qq계정
DWORD AccessIP, // 클라이언트IP
DWORD DeductPrice, // 차감할 가격
DWORD ItemID, // 아이템 ID
DWORD Period, // 주기 : 받기만 하고 결과로 돌려줌
double ItemUniqueID, // 아이템 유니크 ID : 받기만 하고 결과로 돌려줌
DWORD Timeout = 5000); // 타임아웃. 타임아웃 전에 commit 혹은 rollback 하지 않으면 자동 rollback 됨. [msec]
// 해외 빌링시스템 연동시 차감에 대한 커밋 : BT_CN
bool CommitDeductCashOutbound(
long GameCode, // 게임코드
ShopProtocol::PaymentType PaymentType, // 결제 타입
DWORD TransactionID, // 트랜잭션 ID : 비동기 통신을 위함
DWORD AccountSeq, // 계정순번
DWORD AccessIP, // 클라이언트 IP
int USN, // BT_CN qq계정
DWORD DeductPrice, // 차감할 가격
CHAR DeductNo[MAX_DEDUCTNO_LENGTH]); // BT_CN용 OnDeductCashOutbound()에서 리턴받은 차감번호(DeductNo)
// 해외 빌링시스템 연동시 차감에 대한 롤백 : BT_CN
bool RollbackDeductCashOutbound(
long GameCode, // 게임코드
ShopProtocol::PaymentType PaymentType, // 결제 타입
DWORD TransactionID, // 트랜잭션 ID : 비동기 통신을 위함
DWORD AccountSeq, // 계정순번
DWORD AccessIP, // 클라이언트 IP
int USN, // BT_CN qq계정
DWORD DeductPrice, // 차감할 가격
CHAR DeductNo[MAX_DEDUCTNO_LENGTH]); // BT_CN용 OnDeductCashOutbound()에서 리턴받은 차감번호(DeductNo)
protected:
// [do not override] - 로깅후 적절한 응답처리 함수(On...()) 호출
void OnReceive(PBYTE buffer, int size);
// [do not override] - 로깅만 하고 OnNetConnect() 호출
void OnConnect(bool success, DWORD error);
// [do not override] - 로깅만 하고 OnNetSend() 호출
void OnSend(int size);
// [do not override] - 로깅만 하고 OnNetClose() 호출
void OnClose(DWORD error);
protected:
// 샵 서버 연결한 결과
virtual void OnNetConnect(bool success, DWORD error) = 0;
// 샵 서버 데이타 전송 결과
virtual void OnNetSend(int size) = 0;
// 샵 서버 접속 종료
virtual void OnNetClose(DWORD error) = 0;
// 로깅시 보내는 이벤트 메소드
virtual void WriteLog(char* szMsg) = 0;
// 캐시조회 결과
// 캐시조회 결과 : MU_KR, BT_KR, R2_KR, SUN_KR
virtual void OnInquireCash(
DWORD AccountSeq,
double CashSum,
double PointSum,
double MileageSum,
int DetailCount,
ShopProtocol::STCashDetail Detail[],
long ResultCode);
// 캐시조회 결과 : MU_GB, SUN_GB
virtual void OnInquireCash(
DWORD AccountSeq,
double CashSum,
double PointSum,
double MileageSum,
int ListCount,
ShopProtocol::STCashDetail_GB Detail[],
long ResultCode);
// 캐시조회 결과 : SUN_CN, SUN_RU, SUN_JP, BT_TH, MU_JP(GameChu, GameOn), MU_TH, MU_TW, MU_VN
virtual void OnInquireCash(
DWORD AccountSeq,
long ResultCode,
long OutBoundResultCode,
double CashSum,
double MileageSum);
// 캐시조회 결과 : BT_CNL
virtual void OnInquireCash(
DWORD AccountSeq,
char AccountID[MAX_ACCOUNTID_LENGTH],
double CashSum,
double PointSum,
double MileageSum,
int DetailCount,
ShopProtocol::STCashDetail Detail[],
long ResultCode,
long OutBoundResultCode);
// 상품구매 결과
// 상품구매 결과 : MU_KR, BT_KR, R2_KR, SUN_KR
virtual void OnBuyProduct(
DWORD AccountSeq,
long ResultCode,
long LeftProductCount);
// 상품구매 결과 : SUN_CN, SUN_RU, SUN_JP, MU_JP(GameChu, GameOn), MU_TH, MU_TW, MU_VN
virtual void OnBuyProduct(
DWORD AccountSeq,
long ResultCode,
long OutBoundResultCode,
long LeftProductCount);
// 상품구매 결과 : BT_TH, BT_CN
virtual void OnBuyProduct(
DWORD AccountSeq,
long ResultCode,
long OutBoundResultCode,
long LeftProductCount,
double CashSum, // <-- 추가 : 잔여 캐시
double DeductedPrice, // <-- 추가 : 차감된 캐시
double ItemUniqueID, // <-- 추가 : bypass
BYTE PropertyCount,
ShopProtocol::STItemPropertyAll PropertyList[]);
// 상품구매 결과 : BT_CNL
virtual void OnBuyProduct(
DWORD AccountSeq,
char AccountID[MAX_ACCOUNTID_LENGTH],
long LeftProductCount,
long ResultCode,
long OutBoundResultCode);
// 상품선물 결과
// 상품선물 결과 : MU_KR, BT_KR, R2_KR, SUN_KR, MU_GB, SUN_GB
virtual void OnGiftProduct(
DWORD SenderAccountSeq,
DWORD ReceiverAccountSeq,
double GiftSendLimit,
long LeftProductCount,
long ResultCode);
// 상품선물 결과 : SUN_CN, SUN_RU, SUN_JP, MU_JP(GameChu, GameOn), MU_TH, MU_TW, MU_VN
virtual void OnGiftProduct(
DWORD SenderAccountSeq,
long ResultCode,
long OutBoundResultCode,
DWORD ReceiverAccountSeq,
long LeftProductCount);
// 상품선물 결과 : BT_TH, BT_CN
virtual void OnGiftProduct(
DWORD SenderAccountSeq, // 발신자 계정순번
WCHAR SenderAccountID[MAX_ACCOUNTID_LENGTH], // 발신자 아이디
WCHAR SenderCharName[MAX_CHARACTERID_LENGTH], // 발신자 캐릭터 명
DWORD ReceiverAccountSeq, // 수신자 계정순번
WCHAR ReceiverAccountID[MAX_ACCOUNTID_LENGTH], // 수신자 아이디
WCHAR ReceiverCharName[MAX_CHARACTERID_LENGTH], // 수신자 캐릭터 명
WCHAR SendMessage[MAX_MESSAGE_LENGTH], // 선물 메시지
double CashSum, // 잔여 캐시
double DeductedPrice, // 차감된 캐시
long ResultCode, // 결과 코드
long OutBoundResultCode, // OB 결과 코드 : ResultCode -3 인 경우 체크
long LeftProductCount, // 상품 판매 가능 잔여수량 (-1: 무제한) 상품 개수 정보를 갱신해야한다.
BYTE PropertyCount, // 속성(PropertyList) 개수
ShopProtocol::STItemPropertyAll PropertyList[]); // 속성 리스트
// 상품선물 결과 : BT_CNL
virtual void OnGiftProduct(
DWORD SenderAccountSeq,
char SenderAccountID[MAX_ACCOUNTID_LENGTH],
WCHAR SenderCharName[MAX_CHARACTERID_LENGTH],
DWORD ReceiverAccountSeq,
char ReceiverAccountID[MAX_ACCOUNTID_LENGTH],
WCHAR ReceiverCharName[MAX_CHARACTERID_LENGTH],
WCHAR Message[MAX_MESSAGE_LENGTH],
double LimitedCash,
long LeftProductCount,
long ResultCode,
long OutBoundResultCode);
// 공통 서비스
// 상품 샵 스크립트 최신 버전 정보 조회 : 모든 게임
virtual void OnInquireSalesZoneScriptVersion(
unsigned short SalesZone,
unsigned short Year,
unsigned short YearIdentity,
long ResultCode) = 0;
// 배너 스크립트 최신 버전 정보 조회 : 모든 게임
virtual void OnInquireBannerZoneScriptVersion(
unsigned short BannerZone,
unsigned short Year,
unsigned short YearIdentity,
long ResultCode) = 0;
// 캐시 선물 결과 : 모든 게임
virtual void OnGiftCash(
DWORD SenderSeq,
DWORD ReceiverSeq,
long ResultCode,
double GiftSendLimit) = 0;
// 상품 구매/선물 가능 조회 결과 : 모든 게임
virtual void OnInquireBuyGiftPossibility(
DWORD AccountID,
long ResultCode,
long ItemBuy,
long Present,
double MyPresentCash,
double MyPresentSendLimit) = 0;
// 이벤트 상품 리스트 조회 결과 : 모든 게임
virtual void OnInquireEventProductList(
DWORD AccountSeq,
long ProductDisplaySeq,
int PackagesCount,
long Packages[]) = 0;
// 전시 상품 잔여 개수 조회 결과 : 모든 게임
virtual void OnInquireProductLeftCount(
long PackageSeq,
long LeftCount) = 0;
// [deprecated] 보관함 조회 결과 : 모든 게임
virtual void OnInquireStorageList(
DWORD AccountID,
long ListCount,
long ResultCode,
ShopProtocol::STStorage StorageList[]);
// [deprecated] 보관함 페이지 조회 결과 : 모든 게임
virtual void OnInquireStorageListPage(
DWORD AccountID,
int ResultCode,
char StorageType,
int NowPage,
int TotalPage,
int TotalCount,
int ListCount,
ShopProtocol::STStorage StorageList[]) = 0;
// [deprecated] 보관함 페이지 조회 결과(선물 메시지 제외) : 모든 게임
virtual void OnInquireStorageListPageNoGiftMessage(
DWORD AccountID,
int ResultCode,
char StorageType,
int NowPage,
int TotalPage,
int TotalCount,
int ListCount,
ShopProtocol::STStorageNoGiftMessage StorageList[]);
// 보관함 조회 결과(만료시점 추가) : 모든 게임
virtual void OnInquireStorageListEx(
DWORD AccountID,
long ListCount,
long ResultCode,
ShopProtocol::STStorageEx StorageListEx[]);
// 보관함 페이지 조회 결과(만료시점 추가) : 모든 게임
virtual void OnInquireStorageListPageEx(
DWORD AccountID,
int ResultCode,
char StorageType,
int NowPage,
int TotalPage,
int TotalCount,
int ListCount,
ShopProtocol::STStorageEx StorageListEx[]);
// 보관함 페이지 조회 결과(선물 메시지 제외,만료시점 추가) : 모든 게임
virtual void OnInquireStorageListPageNoGiftMessageEx(
DWORD AccountID,
int ResultCode,
char StorageType,
int NowPage,
int TotalPage,
int TotalCount,
int ListCount,
ShopProtocol::STStorageNoGiftMessageEx StorageListEx[]);
// 보관함 상품 사용하기 결과 : 모든 게임
virtual void OnUseStorage(
DWORD AccountSeq,
long ResultCode,
char InGameProductID[MAX_TYPENAME_LENGTH],
BYTE PropertyCount,
long ProductSeq,
long StorageSeq,
long StorageItemSeq,
ShopProtocol::STItemProperty PropertyList[]);
// 보관함 상품 사용하기 결과 Ex : SUN_GB
// 결과값 CashType 추가
virtual void OnUseStorageEx(
DWORD AccountSeq,
long ResultCode,
char InGameProductID[MAX_TYPENAME_LENGTH],
BYTE PropertyCount,
long ProductSeq,
long StorageSeq,
long StorageItemSeq,
ShopProtocol::STItemProperty PropertyList[],
int CashType);
// 보관함 상품 사용하기 결과 Ex : SUN_CN
// DeductMileageFlag 추가 (false : 캐시상품(0), true : 마일리지 상품(1))
virtual void OnUseStorageExDeductMileageFlag(
DWORD AccountSeq,
long ResultCode,
char InGameProductID[MAX_TYPENAME_LENGTH],
BYTE PropertyCount,
long ProductSeq,
long StorageSeq,
long StorageItemSeq,
ShopProtocol::STItemProperty PropertyList[],
bool DeductMileageFlag);
// 보관함 상품 사용하기 롤백 : 모든 게임
virtual void OnRollbackUseStorage(
DWORD AccountSeq,
long ResultCode) = 0;
// 보관함 상품 버리기 결과 : 모든 게임
virtual void OnThrowStorage(
DWORD AccountSeq,
long ResultCode) = 0;
// 마일리지 소진 : 모든 게임
virtual void OnMileageDeduct(
DWORD AccountSeq,
long ResultCode) = 0;
// 마일리지 적립 : 모든 게임
virtual void OnMileageSave(
DWORD AccountSeq,
long ResultCode) = 0;
// 실시간 마일리지 적립 : 모든 게임
virtual void OnMileageLiveSaveUp(
DWORD AccountSeq,
long ResultCode) = 0;
// 아이템 시리얼 코드 업데이트 : 모든 게임
virtual void OnItemSerialUpdate(
DWORD AccountSeq,
long ResultCode) = 0;
// 샵 스크립트 버전 정보 업데이트 : 모든 게임
virtual void OnUpdateVersion(
long GameCode,
unsigned short SalesZone,
unsigned short year,
unsigned short yearIdentity) = 0;
// 배너 스크립트 버전 정보 업데이트 : 모든 게임
virtual void OnUpdateBannerVersion(
long GameCode,
unsigned short BannerZone,
unsigned short year,
unsigned short yearIdentity) = 0;
// 인게임 포인트 유형별 지급 퍼센트 조회 : HX 전용
virtual void OnInquireInGamePointValue(
long ResultCode,
long PointCount,
ShopProtocol::STPointDetail PointList[]);
// 아웃바운드 캐시 차감 : BT_TH
virtual void OnDeductCashOutbound(
long ResultCode, // 결과코드
long OutBoundResultCode, // Outbound 상세에러
DWORD TransactionID, // async 통신용 트랜잭션 id
DWORD AccountSeq, // DeductCashOutbound()에서 넘겨준
WCHAR AccountID[MAX_ACCOUNTID_LENGTH],// DeductCashOutbound()에서 넘겨준 값
DWORD DeductedPrice, // 차감된 금액
INT64 DeductNo, // 차감성공시 차감번호
double CashSum, // 잔여캐시
DWORD Period, // 주기 : 받기만 하고 결과로 돌려줌
double ItemUniqueID); // 아이템 유니크 ID : 받기만 하고 결과로 돌려줌
// 아웃바운드 캐시 차감 롤백 : BT_TH
virtual void OnRollbackDeductCashOutbound(
long ResultCode, // 결과코드
long OutBoundResultCode, // Outbound 상세에러
DWORD TransactionID, // async 통신용 트랜잭션 id
DWORD AccountSeq, // DeductCashOutbound()에서 넘겨준
INT64 DeductNo, // 차감성공시 차감번호
double CashSum); // 잔여캐시
// 아웃바운드 캐시 차감 : BT_CN
virtual void OnDeductCashOutbound(
long ResultCode, // 결과코드
long OutBoundResultCode, // Outbound 상세에러
DWORD TransactionID, // async 통신용 트랜잭션 id
DWORD AccountSeq, // DeductCashOutbound()에서 넘겨준
WCHAR AccountID[MAX_ACCOUNTID_LENGTH],// DeductCashOutbound()에서 넘겨준 값
DWORD DeductedPrice, // 차감된 금액
CHAR DeductNo[MAX_DEDUCTNO_LENGTH], // 차감번호
double CashSum, // 잔여캐시
DWORD Period, // 주기 : 받기만 하고 결과로 돌려줌
double ItemUniqueID); // 아이템 유니크 ID : 받기만 하고 결과로 돌려줌
// 아웃바운드 캐시 차감 커밋 : BT_CN
virtual void OnCommitDeductCashOutbound(
long ResultCode, // 결과코드
long OutBoundResultCode, // Outbound 상세에러
DWORD TransactionID, // async 통신용 트랜잭션 id
DWORD AccountSeq, // DeductCashOutbound()에서 넘겨준
DWORD DeductPrice, // 차감 금액
double CashSum, // 잔여캐시
CHAR DeductNo[MAX_DEDUCTNO_LENGTH]); // 차감번호
// 아웃바운드 캐시 차감 롤백 : BT_CN
virtual void OnRollbackDeductCashOutbound(
long ResultCode, // 결과코드
long OutBoundResultCode, // Outbound 상세에러
DWORD TransactionID, // async 통신용 트랜잭션 id
DWORD AccountSeq, // DeductCashOutbound()에서 넘겨준
DWORD DeductPrice, // 차감 금액
double CashSum, // 잔여캐시
CHAR DeductNo[MAX_DEDUCTNO_LENGTH]); // 차감번호
private:
// 로그 사용
void WriteLog(const char* szFormat, ...);
};