# PC SDK Native 따라하기
Windows Native 개발환경에서 C++언어로 STOVE PC SDK를 연동하는 방법에 대해서 설명하는 따라하기 예제입니다.
따라하기 예제를 진행하기 전에 STOVE 런처 (opens new window) 를 미리 설치하고 SDK 개발환경 준비하기를 참고하여 App key, App secret, Game Id를 미리 발급받아야 합니다. 예제는 Visual Studio 2015 Update 3 작성되었고 상위버전의 Visual Studio에서는 프로젝트 업그레이드가 필요합니다.
# STOVE 런처 설정
# 기존 클라이언트(런처 v2)
1. 다음 링크에서 PC 클라이언트 다운로드 (opens new window)에서 STOVE 런처를 다운로드합니다.
- STOVE 런처가 설치된 폴더에 PolicyConfig.json 파일을 생성
- 기본 설치위치 :
C:\Program Files (x86)\Smilegate\STOVE
- PolicyConfig.json 파일에 아래 내용을 입력하고 STOVE Studio 프로젝트 등록시에 생성
SDK 연동 중에는 STOVE 런처를 실행해야 합니다.
아래와 같은 구조로 PolicyConfig.json을 생성한 후 C:\Program Files (x86)\Smilegate\STOVE 폴더에 덮어씁니다. **STOVE Studio (opens new window)의 프로젝트 관리 메뉴에서 Game ID를 확인한 후 교체합니다.
{
"skip_check_game_list":
[
"id_hellostove"
]
}
2
3
4
5
6
"id_hellostove"는 STOVE Studio에 등록한 gameID로 변경
- STOVE 런처를 실행하고 STOVE Studio에 가입한 스토브ID로 로그인합니다.
# New 클라이언트(런처 v3)
# A. 사전준비
빌드테스트를 진행하기 전에 미리 준비해야 되는 내용을 설명합니다.
# 1. STOVE Studio 가입 및 프로젝트 등록
- STOVE에 가입된 계정으로 스튜디오에 접속하여 스토어 개발자로 등록을 합니다.
- 스튜디오 화면에서 "Studio에서 출시하기"메뉴를 통해 새 프로젝트를 등록합니다.
- 새 프로젝트로 등록하면 프로젝트 화면에서 “게임ID”, "Application Key"값을 확인할 수 있고 PC SDK 연동 시에 필요한 프로젝트 정보를 획득하게 됩니다.
# 2. 게임빌드에 PC SDK 연동 완료
- 게임빌드에 PC SDK가 연동되어 있어야 하며, SDK연동 시에 스튜디오의 프로젝트 정보(게임ID, Application Key)가 정확하게 포함되어 있어야 합니다.
프로젝트 정보를 정확하게 입력하지 않으면 빌드테스트가 진행되지 않습니다.
# 3. New 클라이언트 다운로드
- STOVE 스토어 상단 메뉴(GNB)를 통해 New 클라이언트 (opens new window)를 다운로드 받아 테스트할 PC에 설치합니다.
# B. 개발자모드 활성화 하기
개발자모드 활성화는 New클라이언트가 로컬PC에서 실행되는 (PC SDK와 연동되어 있는)게임빌드를 인식할 수 있도록 하는 작업입니다.
# 1. 개발자모드 설정파일 생성
- New 클라이언트의 개발자모드를 활성화하기 위해 설정파일은
policyconfig.json
이름으로 생성해야 합니다. 파일명이 정확하지 않으면 New 클라이언트에서 설정파일을 인식하지 못합니다. C:\Users\%username%\AppData\Local\STOVE\Config
로 이동하고policyconfig.json
파일을 생성합니다.
경로 : ...\AppData\Local\STOVE\Config\PolicyConfig.json
# 2. 설정내용 입력하기
New 클라이언트의 개발자모드를 활성화하기 위한 마지막 단계는 하단 박스와 같이 설정 내용을 작성해야 합니다.
경고
스토브 런처가 켜져 있으면 작성 후 꼭 스토브 런처를 재시작해야 합니다.
스튜디오에 등록된 게임ID를 dev_game_list
안에 여러개 기입이 가능하고, 기입된 게임ID와 일치하는 게임빌드는 New 클라이언트와 개발자모드로 통신하며 로컬PC에서 빌드테스트가 가능하게 됩니다.
PolicyConfig.json
{
"stove_launcher_policy_config":
{
"dev_game_list": [ "게임ID", "게임ID", .... ]
}
}
2
3
4
5
6
7
New 클라이언트의 개발자모드가 활성화되지 않는 경우, policyconfig.json파일의 위치가 올바른지 확인하고, policyconfig.json에 기입된 게임ID가 스튜디오의 등록된 게임ID하고 정확하게 일치하는지 체크해주시기 바랍니다.
# C. 빌드테스트 진행하기
앞서 설명한 과정을 통해 New 클라이언트의 개발자모드를 활성화 시켰기 때문에 어려운 과정은 모두 완료되었고, New 클라이언트가 실행 중인 상태에서 PC SDK가 연동된 게임빌드를 실행만 하면 빌드테스트가 가능해집니다.
빌드테스트는 exe파일을 직접 실행하거나, 개발툴(Visual Studio, Unity, Unreal 등)의 디버그 모드에서 모두 동작하기 때문에 편리하게 빌드테스트를 진행하여 디버깅 과정을 수행할 수 있습니다.
IAP SDK와 연동된 게임빌드에서 테스트 결제가 필요한 경우 위 방법으로는 지원하지 않습니다. 테스트 결제를 수행하기 위해서는 반드시 빌드를 스튜디오에 업로드하고 New 클라이언트의 스튜디오 테스트 메뉴로 진입한 뒤에 테스트 결제를 시도해주시기 바랍니다.
# 따라하기용 HelloStove 프로젝트 다운로드
아래 링크에서 따라하기용 HelloStove 프로젝트를 다운로드 합니다.
위 따라하기 예제는 아직 PC SDK가 연동되지 않은 상태입니다. 아래 설명부터 PC SDK 연동방법을 따라서 진행해 봅니다.
# 프로젝트 환경 구성하기
- PC SDK 다운로드 페이지에서, 최신 버전의 Native(C/C++) 배포 파일(이하
StovePCSDK
로 표기)을 다운로드를 하고 압축을 푼 다음, 전체 파일을HelloStove_Native
폴더 하위에 복사합니다.
StovePCSDK복사가 완료되면 Visual Studio 를 실행하고 HelloStove.sln을 선택해서 프로젝트를 로딩합니다.
# 1) C/C++
: 추가 포함 디렉터리
설정하기
프로젝트 속성 페이지(Alt + F7)를 열고 C/C++
구성 속성의 추가 포함 디렉터리
에 StovePCSDK_{버전번호}/include
경로를 추가합니다.
$(SolutionDir)StovePCSDK_2.1.0\include
# 2) 링커
: 추가 라이브러리 디렉터리
설정하기
프로젝트 속성 페이지에 링커-일반
구성속성의 추가 라이브러리 디렉터리
에 StovePCSDK_{버전번호}/bin
폴더 경로를 추가합니다.
$(SolutionDir)StovePCSDK_2.1.0\bin\$(Platform)\$(Configuration)
# 3) 추가 종속성
설정
프로젝트 속성 페이지에 링커-입력
구성속성의 추가 종속성
에 StovePCSDK.lib
를 추가합니다.
StovePCSDK.lib
- 여기까지 따라한 뒤 프로젝트를 빌드해서 에러가 발생하지 않는지 체크해 봅니다. 에러가 발생하면 위의 과정을 순서대로 점검해서 문제를 해결합니다.
# 4) HelloStoveDlg.h
헤더파일 수정하기
HelloStove 프로젝트의 HelloStoveDlg.h
파일을 열고 아래와 같이 코드를 추가합니다.
#pragma once
#include "afxwin.h"
/*여기에 '따라하기' 코드를 추가합니다.*/
#include "StovePCSDK.h"
2
3
4
5
# 5) 빌드하기
빌드
메뉴에서 솔루션 빌드
를 실행합니다. 앞서 따라하기의 모든 설정을 진행 했다면 에러 없이 정상적으로 빌드됩니다.
빌드 에러가 발생하는 경우, 에러 메시지를 확인하고 프로젝트 설정의 경로에 오류가 있는지, StovePCSDK 파일 복사에 누락이 없는지 등을 체크합니다.
# SDK 초기화
StovePCSDK를 사용하기 위해서는 초기화 함수를 먼저 실행해줘야 합니다. 초기화 방법은 StovePCConfig
와 StovePCCallback
구조체에 적절한 값을 입력하고 StovePC_Init
함수를 호출합니다.
StovePC_Init 함수의 사용방법은 CHelloStoveDlg::OnBnClickedInit
함수에 아래와 같이 입력하여 사용합니다.
void CHelloStoveDlg::OnBnClickedInit()
{
/*여기에 '따라하기' 코드를 추가합니다.*/
//config
StovePCConfig config;
memset(&config, 0, sizeof(StovePCConfig));
config.env = "LIVE";
config.appKey = "YOUR_APP_KEY";
config.secretKey = "YOUR_SECRET_KEY";
config.gameId = L"YOUR_GAME_ID";
config.logLevel = StovePCLogLevel::STOVE_PC_LOG_LEVEL_DEBUG;
config.logPath = L"";
//callback
StovePCCallback callback;
memset(&callback, 0, sizeof(StovePCCallback));
callback.OnError = OnError;
callback.OnInitComplete = OnInitComplete;
callback.OnToken = OnToken;
callback.OnUser = OnUser;
//initialize
StovePCResult result = StovePC_Init(config, callback);
if (result != StovePCResult::STOVE_PC_NO_ERROR)
{
//StovePCSDK initialize fail
_displayConfig(config);
CString log;
log.Format(L"[Error] StovePC_Init, Result %d", result);
OnLog(log);
}
else
{
//StovePCSDK initialize success
_displayConfig(config);
OnLog(L"[Success] StovePC_Init");
//StovePC_Init 함수 호출이 성공했으므로,
//타이머에서 주기적으로 StovePC_RunCallback 함수를 호출합니다.
SetTimer(USER_TIMER, 500, NULL);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
주의사항
PCSDK 로그경로는 절대적경로로 설정해야 합니다. ex) C:\Program Files\{Your Game Folder}\Logs
마지막에 "\"는 추가하지 않습니다. PCSDK 에서 "StovePCSDK.log" 파일명을 자동으로 추가합니다.
만약 "" 빈문자열로 경로를 설정하게 되면 PCSDK는 자동적으로 게임실행파일 폴더 또는 PCSDK DLL 이 위치한 폴더의 경로로 로그가 생성됩니다.
"YOUR_APP_KEY", "YOUR_SECRET_KEY", "YOUR_GAME_ID"는 STOVE Studio (opens new window)로부터 사전에 발급 받은 데이터로 변경해야 됩니다.
만약 STOVE Studio에 입점 신청한 스토브 계정
으로 스토브 런처에 로그인 하지 않고 StovePC_Init
함수가 호출되면 150 에러코드(sgup 초기화 실패)가 발생합니다.
위의 코드에 포함되어 있듯이 CHelloStoveDlg::OnBnClickedInit
함수에서 호출한 StovePC_Init
함수의 반환 값이 성공이면 (즉, STOVE_PC_NO_ERROR을 리턴 할 시) StovePC_RunCallback
함수를 타이머에 걸어줘야 합니다.
여기 따라하기 예제에서는 MFC의 SetTimer
함수를 통해, 500ms 마다 StovePC_RunCallback
함수를 호출하도록 코딩하였습니다. SetTimer
를 통해 콜백 CHelloStoveDlg::OnTimer
함수가 주기적으로 실행될 시에 아래 코드와 같이 StovePC_RunCallback
함수를 걸어 둡니다.
void CHelloStoveDlg::OnTimer(UINT_PTR nIDEvent)
{
if (nIDEvent == USER_TIMER)
{
/*여기에 '따라하기' 코드를 추가합니다.*/
StovePC_RunCallback();
}
CDialogEx::OnTimer(nIDEvent);
}
2
3
4
5
6
7
8
9
StovePC_Init
함수가 정상적으로 완료됐을 때 호출되는 콜백 OnInitComplete
함수의 주석을 풀고 아래 코드를 작성합니다.
또한 StovePC_Init
함수가 정상적으로 실행되면 콜백 OnInitComplete
함수가 호출됩니다. 즉, OnInitComplete 함수가 호출되면 StovePC_Init 함수가 성공적으로 실행되었음을 의미하여 아래 코드와 같이 StovePCSDK초기화가 성공한 것을 로그로 남길 수 있습니다.
void OnInitComplete()
{
/*여기에 '따라하기' 코드를 추가합니다.*/
OnLog(L"[Success] InitComplete\n");
}
2
3
4
5
6
7
StovePC_Init
함수, 또는 기타 다른 StovePCSDK의 함수 호출이 실패하는 경우 OnError
함수가 호출됩니다. StovePCSDK의 함수 에러를 확인하기 위해 아래 코드를 작성하여 확인할 수 있습니다.
void OnError(const StovePCError error)
{
/*여기에 '따라하기' 코드를 추가합니다.*/
OnLog(L"[Error]\n");
CString log;
log.Format(L"StovePCError occurred\n -funcType: %d, result:%d, externalError: %d", error.functionType, error.result, error.externalError);
OnLog(log);
}
2
3
4
5
6
7
8
9
10
11
# SDK 종료
StovePCSDK의 모든 사용이 끝난 뒤에는 리소스 정리를 위해 StovePC_UnInit
함수 호출이 필요합니다. 아래 와 같이 CHelloStove::OnBnClickedUnInit
함수에 StovePC_UnInit
함수를 호출하는 코드를 추가합니다.
void CHelloStoveDlg::OnBnClickedUnInit()
{
/*여기에 '따라하기' 코드를 추가합니다.*/
StovePCResult result = StovePC_UnInit();
if (result != STOVE_PC_NO_ERROR)
{
CString log;
log.Format(L"[Error] StovePC_UnInit, Result %d", result);
OnLog(log);
}
else
{
OnLog(L"[Success] StovePC_UnInit");
}
}
...
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
다음의 따라하기 코드들은 StovePCSDK의 초기화가 성공한 것을 가정합니다.
# 사용자 정보 얻기
스토브 런처에 로그인한 사용자 정보를 얻기 위해서는 StovePC_GetUser
함수로 확인할 수 있습니다. StovePC_GetUser
함수의 동작확인을 위해 CHelloStoveDlg::OnBnClickedGetUser
함수에 추가합니다.
void CHelloStoveDlg::OnBnClickedGetUser()
{
/*여기에 '따라하기' 코드를 추가합니다.*/
StovePCResult result = StovePC_GetUser();
if (result != STOVE_PC_NO_ERROR)
{
CString log;
log.Format(L"[Error] StovePC_GetUser, Result %d", result);
OnLog(log);
}
else
{
OnLog(L"[Success] StovePC_GetUser");
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
StovePC_GetUser
함수가 정상적으로 호출됐을 때의 콜백 OnUser
함수의 주석을 풀고 아래 코드를 작성합니다.
StovePC_GetUser
함수가 정상적으로 호출되면 콜백 OnUser 함수가 호출됩니다. 콜백 OnUser 함수가 호출되면 StovePCUser 인자를 통해 사용자 정보 추출이 가능합니다.
void OnUser(const StovePCUser user)
{
/*여기에 '따라하기' 코드를 추가합니다.*/
OnLog(L"<User>");
CString log;
log.Format(L"memberNo : %I64d", user.memberNo);
OnLog(log);
log.Format(L"nickname : %s", user.nickname);
OnLog(log);
log.Format(L"gameUserId : %s", user.gameUserId);
OnLog(log);
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 토큰 정보 얻기
스토브 런처에 로그인한 사용자의 토큰 정보를 얻어 올 때 StovePC_GetToken
함수를 사용합니다. CHelloStoveDlg::OnBnClickedGetToken
함수에 StovePC_GetToken
함수를 추가해서 토큰 정보를 StovePCSDK 에 요청합니다.
void CHelloStoveDlg::OnBnClickedGetToken()
{
/*여기에 '따라하기' 코드를 추가합니다.*/
StovePCResult result = StovePC_GetToken();
if (result != STOVE_PC_NO_ERROR)
{
CString log;
log.Format(L"[Error] StovePC_GetToken, Result %d", result);
OnLog(log);
}
else
{
OnLog(L"[Success] StovePC_GetToken");
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
토큰이란? STOVE 런처에 로그인된 사용자의 엑세스토큰(Access Token)으로 게임서버가 이 엑세스토큰을 스토브 인증서버로 전달해서 로그인한 사용자의 유효성 검증을 수행할 수 있습니다. 엑세스토큰에 대한 상세한 설명은 store.support@smilegate.com 로 기술지원을 받으시길 바랍니다.
StovePC_GetToken
함수가 정상적으로 호출되면 콜백 OnToken
함수가 호출됩니다. OnToken
함수의 StovePCToken
인자를 통해 토큰 정보를 확인할 수 있습니다.
void OnToken(const StovePCToken token)
{
/*여기에 '따라하기' 코드를 추가합니다.*/
OnLog(L"<Token>");
CString log;
log.Format(L"accessToken : %s", MtoW(token.accessToken));
OnLog(log);
}
2
3
4
5
6
7
8
9
10
# 빌드 및 실행
StovePCSDK_{버전번호}\bin\{플랫폼}\Release
폴더로 HelloStove_Native\bin\{플랫폼}\Release
폴더를 덮어씁니다.
스토브 런처를 실행하고 로그인 합니다.
이제, F5
를 눌러 HelloStove
프로젝트를 빌드하고 실행합니다.
UI화면의 버튼을 순서대로 실행해보면서 정상적으로 동작하는지 확인합니다.
축하합니다!
PC SDK Native 따라하기를 성공적으로 완료했습니다.
← 따라하기-Unreal SDK 사용 흐름 →