지원 프로그램
home
슬기로운 데모생활
home

연동하기

생성일
2024/03/14 23:51
태그
상위 항목
하위 항목

1. Config, Callback 설정

PC SDK를 초기화하기 위해서는, 먼저 StovePCConfig와 StovePCCallback 구조체에 값을 채운 뒤, StovePC_Init 함수를 호출합니다.
아래 코드를 참고하여 StovePCConfig 구조체의 각 필드 값을 채웁니다.
StovePCConfig config{"live", "YOUR_APP_KEY", "YOUR_SECRET_KEY", "YOUR_GAME_ID", StovePCLogLevel::STOVE_PC_LOG_LEVEL_DEBUG, ""};
C++
복사
StovePCConfig 구조체에 대한 설명은 StovePCDefine.h 파일을 참고하세요.
게임과 PC SDK간의 커뮤니케이션은 StovePCCallback 구조체와 연결된 콜백함수들을 사용합니다. 게임 코드에서는 아래 StovePCCallback 구조체의 콜백 포인터에 연결할 함수 포인터를 사전에 정의하고 정의된 함수의 포인터를 연결시켜 줘야해야 합니다.
struct StovePCCallback { /// StovePCSDK 에서 에러발생시 호출되는 콜백 void(*OnError)(const StovePCError error); /// PC SDK 초기화가 완료됐을 때 호출되는 콜백 void(*OnInitComplete)(); /// GetToken 처리가 완료됐을 때 호출되는 콜백 void(*OnToken)(const StovePCToken token); /// GetUser 처리가 완료됐을 때 호출되는 콜백 void(*OnUser)(const StovePCUser user); /// GetOwnership 처리가 완료됐을 때 호출되는 콜백 void(*OnOwnership)(int size, StovePCOwnership* ownership); };
C++
복사
StovePCCallback 구조체의 instance는 사용하기 전에 반드시 NULL 초기화가 필요합니다.
/* StovePCCallback 구조체 instance 생성*/ StovePCCallback callback; /* 모든 함수 포인터를 NULL로 초기화*/ memset(&callback, 0, sizeof(StovePCCallback)); /* 구현한 함수 포인터를 연결*/ callback.OnError = OnMyErrorCallback; callback.OnInitComplete = OnMyInitCompleteCallback; callback.OnToken = OnMyTokenCallback; callback.OnUser = OnMyUserInfoCallback; callback.OnOwnership = OnMyOwnershipCallback;
C++
복사
필수적으로 연동해야 하는 OnErrorOnInitCompleteOnOwnership 콜백함수 외의 나머지 콜백함수는 필요 시에만 연동을 하면 됩니다. 예를 들어, 소유권(Ownership) 기능만 사용하는 경우, 아래와 같이 연결하면 됩니다.
/*소유권(Ownership) 기능만 사용하는 경우는, 필수 구현 콜백인 OnError, OnInitcomplte외에 OnOwnership 콜백만 추가로 구현해서 연결합니다.*/ callback.OnError = OnMyErrorCallback; callback.OnInitComplete = OnMyInitCompleteCallback; callback.OnOwnership = OnMyOwnershipCallback;
C++
복사

2. SDK 초기화

StovePCConfig와 StovePCCallback 구조체 초기화 및 콜백함수 연결이 완료되었으면 PC SDK를 초기화하기 위해 StovePC_Init 함수를 호출합니다.
StovePCResult result = StovePC_Init(config, callback); if (result == StovePCResult::STOVE_PC_NO_ERROR) { /*StovePCSDK init 성공 타이머 등을 이용해서 일정 주기로 StovePC_RunCallback() 호출*/ }
C++
복사
StovePC_Init 함수는 config와 callback의 유효성 여부만 확인한 후, 즉시 StovePCResult enum 타입 값을 반환합니다.
성공한 경우, STOVE_PC_NO_ERROR 값이 반환됩니다. 실패한 경우는 해당 에러 코드를 반환하며 게임 종료를 처리해야 합니다. 전체 에러 코드 목록은 StovePCDefine.h 파일의 StovePCResult enum을 확인하면 됩니다.
반환값이 STOVE_PC_NO_ERROR, 즉 '성공'인 경우, StovePC_RunCallback 함수를 주기적으로 호출해 줍니다.
StovePC_RunCallback 함수를 주기적으로 호출해야만, 연결된 콜백이 정상적으로 호출됩니다.
호출 주기가 길면 콜백의 응답 속도도 느려지게 되므로, 적당한 호출 주기를 유지하는 것이 좋습니다. 본 가이드의 예제 코드는 호출 주기를 0.5초로 설정했습니다.
StovePC_RunCallback 함수를 비롯하여 PCSDK와 연동되는 Callback함수들은 반드시 메인스레드에서 호출하도록 코드를 작성해주시기 바랍니다.
StovePC_Init 함수는 config와 callback 유효성 확인을 제외한, 그 외의 작업을 비동기로 처리합니다.
비동기 작업이 성공적으로 완료된 경우, OnInitComplete 콜백이 호출되며, 에러가 발생한 경우는 OnError 콜백이 호출됩니다.
에러가 발생한 경우, 전달된 StovePCError 구조체를 통해 에러 코드, 메시지 등을 확인할 수 있습니다.
void OnInitComplete() { printf("pc sdk init success"); } void OnError(const StovePCError error) { switch (Error.functionType) { case STOVE_PC_INIT: case STOVE_PC_GET_USER: case STOVE_PC_GET_OWNERSHIP: QuitApplicationDueToError(); break; } } void QuitApplicationDueToError() { // 어쩌면 당신은 즉시 앱을 중단하기보다는 사용자에게 앱 중단에 대한 메시지를 보여준 후 // 사용자 액션(e.g. 종료 버튼 클릭)에 따라 앱을 중단하고 싶어 할지도 모릅니다. // 그렇다면 여기에 QuitApplication을 지우고 당신만의 로직을 구현하십시오. // 권장하는 필수 사전 작업 오류에 대한 메시지는 아래와 같습니다. // 한국어 : 필수 사전 작업이 실패하여 게임을 종료합니다. // 그 외 언어 : The required pre-task fails and exits the game. OnStoveLog("QuitApplicationDueToError"); exit(0) }
C++
복사
OnInitComplete 콜백이 오기 전, PC SDK의 초기화 상태 값을 조회할 필요가 있는 경우, StovePC_GetInitState 함수를 사용할 수 있습니다.
/*StovePC_Init 호출 후...*/ while(StovePC_GetInitState() == StovePCInitState::STOVE_PC_INIT_PENDING) { sleep(500ms); StovePC_RunCallback(); } if (StovePC_GetInitState() == StovePCInitState::STOVE_PC_INIT_COMPLETE) { /*초기화 완료 OnInitComplete 콜백이 호출됨*/ } else { /*초기화 실패 OnError 콜백이 호출됨*/ }
C++
복사

3. SDK 연동시 주의사항

주의사항 StovePCConfig 구조체의 로그레벨 설정시 테스트 시에는 StovePCLogLevel::STOVE_PC_LOG_LEVEL_DEBUG 값으로 설정하고, 정식 출시 시에는 StovePCLogLevel::STOVE_PC_LOG_LEVEL_ERROR 값으로 설정하기 바랍니다. PC SDK 초기화가 완료되기 전에 GetTokenGetUserGetOwnership 함수를 호출하면 정상적으로 결과를 받지 못할 수 있습니다. 즉, OnInitComplete 콜백이 정상적으로 수신된 이후에 GetTokenGetUserGetOwnership 함수를 호출해야 정상적으로 결과를 받을 수 있습니다.

4. SDK 종료

PC SDK 사용이 끝난 뒤에 StovePC_UnInit 함수를 호출하여 사용중인 리소스를 정리합니다.
StovePCResult result = StovePC_UnInit(); if (result == StovePCResult::STOVE_PC_NO_ERROR) { /*성공 처리*/ } ...
C++
복사

5. 사용자 정보 얻기

StovePC_GetUser 함수로 STOVE 런처에 로그인한 사용자 정보를 조회합니다.
StovePCResult result = StovePC_GetUser(); if (result == StovePCResult::STOVE_PC_NO_ERROR) { /*성공 처리*/ }
C++
복사
StovePC_GetUser 함수가 정상적으로 처리되면 OnUser 콜백이 호출됩니다.
콜백에 전달되는 StovePCUser 구조체를 통해 사용자의 멤버넘버, 닉네임, 게임사용자아이디 정보들을 알 수 있습니다. StovePCUser 구조체에 대한 설명은 StovePCDefine.h 파일에 설명되어 있습니다.
void OnUser(const StovePCUser user) { /*사용자 정보 출력*/ printf("User Info(memberNo = %I64d, nickname = %S, gameUserId = %s)", user.memberNo, user.nickname, user.gameUserId); }
C++
복사

6. 토큰 정보 얻기

StovePC_GetToken 함수로 STOVE 런처에 로그인한 사용자의 토큰 정보를 확인할 수 있습니다.
StovePCResult result = StovePC_GetToken(); if (result == StovePCResult::STOVE_PC_NO_ERROR) { /*성공 처리*/ }
C++
복사
StovePC_GetToken 함수가 정상적으로 처리되면 OnToken 콜백이 호출됩니다.
콜백에 전달되는 StovePCToken 구조체에는 토큰 문자열이 포함되어 있습니다.
void OnToken(const StovePCToken token) { /*토큰 정보 출력*/ printf("Token : %s", token.accessToken); }
C++
복사
토큰이란? STOVE 런처에 로그인된 사용자의 엑세스토큰(Access Token)으로 게임서버가 이 엑세스토큰을 스토브 인증서버로 전달해서 로그인한 사용자의 유효성 검증을 수행할 수 있습니다. 엑세스토큰에 대한 상세한 설명은 store.support@smilegate.com으로 기술지원을 받으시길 바랍니다

7. 소유권 정보 얻기

StovePC_GetOwnership 함수로 사용자가 해당 게임을 구매해서 소유하고 있는지 여부를 확인할 수 있습니다.
StovePCResult result = StovePC_GetOwnership(); if (result == STOVE_PC_NO_ERROR) { /*성공 처리*/ /*소유권에 관한 정보는 OnOwnership 콜백으로 전달됩니다.*/ }
C++
복사
StovePC_GetOwnership 함수가 정상적으로 처리되면 OnOwnership 콜백이 호출됩니다.
OnOwnership 콜백의 파라미터인 StovePCOwnership 구조체에 대한 세부 정보는 StovePCDefine.h 파일을 참고하세요.
아래는 OnOwnership 콜백에서 게임 구매 여부를 판단하는 예시 코드입니다.
DLC가 없는 패키지게임인 경우, 20~23 line의 확인 코드는 불필요합니다.
void OnOwnership(int size, StovePCOwnership* ownership) { bool owned = false; StovePCOwnership* data = ownership; for (int i = 0; i < size; i++, data++) { if ((data->memberNo != LOGIN_USER_MEMBER_NO /*StovePCUser 구조체의 memberNo*/) || (data->ownershipCode != 1 /*1:소유권 획득, 2:소유권 해제(구매 취소한 경우)*/)) { continue; } if (0 == wcscmp(L"YOUR_GAME_ID", data->gameId) && data->gameCode == 3 /* 3: 정식게임, 4: DEMO*/) { owned = true; // 소유권 확인 변수 true로 설정 } /*DLC를 판매하는 게임일 때만 필요*/ if (0 == wcscmp(L"YOUR_DLC_ID", data->gameId) && data->gameCode == 5 /* 5: DLC*/) { // YOUR_DLC_ID(DLC) 소유권이 있기에 DLC 플레이 허용 } } if(owned) { // 소유권 검증이 정상적으로 완료된 이후 게임진입 로직 작성 } else { // 소유권 검증실패 후 게임을 종료하고 에러메세지 표출 로직 작성 } }
C++
복사
게임을 구매한 계정(소유권 보유)으로 STOVE 런처에 로그인한 후 게임을 플레이를 할 수 있습니다.
게임 소유권이 없는 계정으로 STOVE 런처에 로그인한 후 exe 실행 시 아래 안내 메시지(예시)를 출력한 후 게임을 종료합니다.
한국어 외의 OS : Please log in to STOVE Client with the account that has purchased the game.
한국어 : 게임을 구매한 계정으로 STOVE 클라이언트에 로그인하시기 바랍니다.

8. 언어 설정

StovePC_SetLanguage 함수로 언어를 설정합니다.
PC SDK는 초기화시 시스템 언어(운영체제 언어)를 이용하여 언어를 기본으로 설정합니다.
명시적으로 시스템 언어(운영체제 언어)를 설정하려면 파라미터로 "system"을 입력합니다.
특정 언어를 설정하기 위해서는 초기화 성공 이후(e.g. OnInitComplete) StovePC_SetLanguage 함수를 호출합니다.
StovePCResult result = StovePC_SetLanguage("LANGUAGE_CODE"); if (result == StovePCResult::STOVE_PC_NO_ERROR) { /* 성공 처리 */ }
C++
복사

9. 언어 번역

StovePC_TranslateLanguage 함수로 언어를 번역합니다.
PC SDK는 설정된 언어 정보를 기반으로 특정 문자열에 대한 번역본을 제공합니다.
특정 문자열은 PC SDK 에서 관리하는 문자열 아이디(String Id)로 관리됩니다.
게임에서 PC SDK 팝업 UI 를 직접 구현하는 경우 UI에 표시되는 문자열은 StovePC_TranslateLanguage 함수를 통해 번역된 문자열을 표시해야 합니다.
wchar_t* translated = StovePC_TranslateLanguage("STRING_ID");
C++
복사
주의사항 PC SDK에 설정된 언어에 대해 특정 문자열의 번역본이 없는 경우 영어 번역본을 리턴하며, 예외 발생 또는 지원하지 않는 문자열 아이디에 대해서는 입력 파라미터(문자열 아이디)를 그대로 리턴합니다.