Files
Sun1602/Server/Shop/ClientStub/BillEventHandler.h
T
2022-10-26 12:25:11 +08:00

146 lines
4.6 KiB
C++

#pragma once
/**************************************************************************************************
작성일: 2008-07-08
작성자: 문상현 (youngmoon@webzen.co.kr)
설명: 빌링서버를 사용하는 클라이언트에게 수신된 패킷을 전달해 주기 위한 이벤트 객체
이벤트를 받는쪽(빌링클라이언트)에서 상속받아 사용해야 한다.
**************************************************************************************************/
#include "ClientSession.h"
class CBillEventHandler : public CClientSession
{
public:
CBillEventHandler(void);
virtual ~CBillEventHandler(void);
// 초기화 함수 (프로그램 실행하고 한번만 사용해야 한다.)
bool CreateSession(WBANetwork::LPFN_ErrorHandler errhandler = NULL);
// 빌링 로그인 요청
bool UserLogin(
DWORD dwAccountGUID, // 계정 GUID
DWORD dwIPAddress, // 클라이언트 아이피 주소
DWORD dwRoomGUID, // PC GUID (없을경우 0), PC GUID는 게임 DB에서 조회 하시면 됩니다. (PC방 정보는 게임 DB와 빌링 DB 동기화 )
DWORD dwGameCode, // 게임 코드
DWORD dwServerType); // 서버 유형 코드
// 빌링 로그아웃 요청
bool UserLogout(
long dwBillingGUID); // 빌링 유니크 아이디(로그인 성공 시 OnUserStatus 함수를 통해 전달된 값)
// 빌링 로그인 정보 조회 요청
bool InquireUser(
long dwBillingGUID); // 빌링 유니크 아이디(로그인 성공 시 OnUserStatus 함수를 통해 전달된 값)
// PC 방이 멀티 유저 지원 여부 조회
bool InquireMultiUser(
long AccountGUID, // 계정 GUID
long RoomGUID); // PC 방 GUID
// 개인 정액/정량 보유 여부 조회
bool InquirePersonDeduct(
long AccountGUID, // 계정 GUID
long GameCode); // 게임 코드
// 특정 PC방의 게임 별 정량 보유 여부 조회
bool InquirePCRoomPoint(
long AccountGUID, // 계정 GUID
long RoomGUID, // PC 방 GUID
long GameCode); // 게임 코드
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:
// 유저의 결재 정보가 변경되었을 때 전달받는 콜백
// 정상 로그인의 경우 : (0 == nResultCode) && (0 == nAccessCheck) && (0 != nDeductType)
virtual void OnUserStatus(
DWORD dwAccountGUID, // 계정 GUID
long dwBillingGUID, // 빌링 유니크 아이디
DWORD RealEndDate, // 정액 사용 종료 일시 (__time32_t)
DWORD EndDate, // 정액 실제 종료 일시
double dRestPoint, // 정량 잔여 포인트
double dRestTime, // 정량 잔연 시간(초)
short nDeductType, // 사용자 차감 유형
short nAccessCheck, // 접근 체크 결과
short nResultCode) // 처리 결과
= 0;
// 개인의 게임 별 정액, 정량 보유 여부 조회 결과
virtual void OnInquirePersonDeduct(
long AccountGUID, // 계정 GUID
long GameCode, // 게임 코드
long ResultCode) // 처리 결과
= 0;
// 특정 PC방의 게임 별 정량 보유 여부 조회 결과
virtual void OnInquirePCRoomPoint(
long AccountGUID, // 계정 GUID
long RoomGUID, // PC 방 GUID
long GameCode, // 게임 코드
long ResultCode) // 처리 결과
= 0;
// PC 방 멀티 유저 조회 결과
// Result : 1 (가능), 2 (불가), -1 (PC방 정보 없음)
virtual void OnInquireMultiUser(
long AccountID, // 계정 GUID
long RoomGUID, // PC 방 GUID
long Result) // 처리 결과
= 0;
// 빌링에 로그인한 유저 정보를 인증서버에 전송
// 실제로 인증서버에 로그인 했는지 체크하도록 알려주는 인터페이스
// 정량에 대해서만 로그인 후 약 3분에 한번씩 전송.
// 상품이 변경되는 시점과, 로그아웃 되면 전송되지 않는다.
virtual void OnCheckLoginUser(
long AccountID, // 계정 GUID
long BillingGUID) // 빌링 유니크 아이디(로그인 성공 시 OnUserStatus 함수를 통해 전달된 값)
= 0;
// 빌링서버에 접속한 이후 PC방 업주가 PC방 IP를 변경했을 때,
// 빌링서버에 접속되어져 있는 게임서버로 IP변경한 PC방 GUID를 알려줌.
virtual void OnPCRoomIPUpdate(
long RoomGUID, // PC 방 GUID
long GameCode) // 처리 결과
= 0;
// 빌링서버의 연결 성공 여부
// (새로 연결되면 현재 차감이 필요한 모든 유저의 정보를 다시 로그인해야한다.)
// success : 연결 성공 여부
// error : 에러코드
virtual void OnNetConnect(bool success, DWORD error) = 0;
// 빌링서버로 보낸 데이타 전송 여부
// size : 전송된 패킷 사이즈
virtual void OnNetSend(int size) = 0;
// 빌링서버와 세션이 끊겼을때 (빌링서버가 죽은것으로 처리 해야한다.)
// error : 에러코드
virtual void OnNetClose( DWORD error ) = 0;
//로그를 써야할때 보내는 이벤트 메소드
virtual void WriteLog(char* szMsg) = 0;
private:
// 빌링서버의 로그를 작성 이벤트 : 함수내부에서 로그를 남길수 있도록 해야 함.
void WriteLog(const char* szFormat, ...);
};