# 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 런처 설정
(1) PC 클라이언트 다운로드 (opens new window)에서 STOVE 런처를 다운로드합니다.
(2) STOVE 런처가 설치된 폴더에 PolicyConfig.json 파일을 생성
- Live 기본 설치위치 :
C:\Program Files (x86)\Smilegate\STOVE
(3) PolicyConfig.json 파일에 아래 내용을 입력하고 STOVE Studio 프로젝트 등록시에 생성
주의사항
SDK 연동 중에는 STOVE 런처를 실행 후 로그인 된 상태여야 합니다.
아래와 같은 구조로 PolicyConfig.json을 생성한 후
- Live :
C:\Program Files (x86)\Smilegate\STOVE
폴더에 덮어씁니다.Game ID
를 확인한 후 교체합니다.
{
"skip_check_game_list":
[
"id_hellostove"
]
}
2
3
4
5
6
참고
"id_hellostove"는 STOVE Partners에 등록한 gameID로 변경 하시면 됩니다.
(4) STOVE 런처를 실행하고 STOVE에 가입한 신청한 스토브ID로 로그인
# 따라하기용 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 사용 흐름 →