# PC SDK Native 따라하기

Windows Native 개발환경에서 C++언어로 STOVE PC SDK를 연동하는 방법에 대해서 설명하는 따라하기 예제입니다.

confirm 따라하기 예제를 진행하기 전에 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"
  ]
}
1
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 폴더 하위에 복사합니다.

Figure1

StovePCSDK복사가 완료되면 Visual Studio 를 실행하고 HelloStove.sln을 선택해서 프로젝트를 로딩합니다.

# 1) C/C++ : 추가 포함 디렉터리 설정하기

프로젝트 속성 페이지(Alt + F7)를 열고 C/C++ 구성 속성의 추가 포함 디렉터리StovePCSDK_{버전번호}/include 경로를 추가합니다.

$(SolutionDir)StovePCSDK_2.1.0\include
1

Figure2

# 2) 링커 : 추가 라이브러리 디렉터리 설정하기

프로젝트 속성 페이지에 링커-일반 구성속성의 추가 라이브러리 디렉터리StovePCSDK_{버전번호}/bin 폴더 경로를 추가합니다.

$(SolutionDir)StovePCSDK_2.1.0\bin\$(Platform)\$(Configuration)
1

Figure3

# 3) 추가 종속성 설정

프로젝트 속성 페이지에 링커-입력 구성속성의 추가 종속성StovePCSDK.lib를 추가합니다.

StovePCSDK.lib
1

Figure4

  • 여기까지 따라한 뒤 프로젝트를 빌드해서 에러가 발생하지 않는지 체크해 봅니다. 에러가 발생하면 위의 과정을 순서대로 점검해서 문제를 해결합니다.

# 4) HelloStoveDlg.h 헤더파일 수정하기

HelloStove 프로젝트의 HelloStoveDlg.h 파일을 열고 아래와 같이 코드를 추가합니다.

#pragma once
#include "afxwin.h"

/*여기에 '따라하기' 코드를 추가합니다.*/
#include "StovePCSDK.h"
1
2
3
4
5

# 5) 빌드하기

빌드 메뉴에서 솔루션 빌드를 실행합니다. 앞서 따라하기의 모든 설정을 진행 했다면 에러 없이 정상적으로 빌드됩니다. 빌드 에러가 발생하는 경우, 에러 메시지를 확인하고 프로젝트 설정의 경로에 오류가 있는지, StovePCSDK 파일 복사에 누락이 없는지 등을 체크합니다.

# SDK 초기화

StovePCSDK를 사용하기 위해서는 초기화 함수를 먼저 실행해줘야 합니다. 초기화 방법은 StovePCConfigStovePCCallback 구조체에 적절한 값을 입력하고 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);
    }
}
1
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 이 위치한 폴더의 경로로 로그가 생성됩니다.

confirm "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);
}
1
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");
}

1
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);
}
1
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");
    }
}
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

confirm 다음의 따라하기 코드들은 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");
    }
}
1
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);
}
1
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");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

confirm 토큰이란? 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);
}
1
2
3
4
5
6
7
8
9
10

# 빌드 및 실행

StovePCSDK_{버전번호}\bin\{플랫폼}\Release 폴더로 HelloStove_Native\bin\{플랫폼}\Release 폴더를 덮어씁니다.

Figure5

스토브 런처를 실행하고 로그인 합니다.

이제, F5를 눌러 HelloStove 프로젝트를 빌드하고 실행합니다.
UI화면의 버튼을 순서대로 실행해보면서 정상적으로 동작하는지 확인합니다.

Figure6

축하합니다!
PC SDK Native 따라하기를 성공적으로 완료했습니다.

Last Updated: 2023. 11. 22. 오후 1:25:27