# PC SDK Nativeチュートリアル

Windows Native開発環境でC++言語でチュートリアル用のHelloStoveプロジェクトにSTOVE PC SDKを連動する方法について説明します。

confirm このチュートリアルを進む前に、STOVE Launcher (opens new window)をインストールしてSDK開発環境を準備するを参照して、App key、App secret、Game Idを事前に発行する必要があります。 例はVisual Studio 2015 Update 3で書かれており、親バージョンのVisual Studioではプロジェクトのアップグレードが必要です。

# チュートリアル用の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.3.1\include
1

Figure2

# 2) リンカ : 追加のライブラリ ディレクトリ 設定

プロジェクトのプロパティ ページにリンカ - 一般構成プロパティの追加ライブラリディレクトリStovePCSDK_ {バージョン番号} / binフォルダパスを追加します。

$(SolutionDir)StovePCSDK_1.\bin\$(Platform)\$(Configuration)
1

Figure3

# 3) 追加の依存ファイル 設定

プロジェクトのプロパティーページの追加の依存ファイルStovePCSDK.libを追加します。DebugとReleaseの構成別に追加する依存ファイル名が違いますのでご注意ください。 Debugでは StovePCSDKd.lib(後ろにdが付きます)、ReleaseではStovePCSDK.libです。

> Debugモード : StovePCSDKd.lib 
> Releaseモード : StovePCSDK.lib
1
2

Figure4

  • ここからはプロジェクトをビルドしてエラーが発生しないかチェックしてみます。 エラーが発生した場合は、上記の手順を順番に確認して問題をご解決ください。

# 4) HelloStoveDlg.hヘッダファイルを修正する

HelloStoveプロジェクトの HelloStoveDlg.hファイルを開き、次のようにコードを追加します。

#pragma once
#include "afxwin.h"

/*ここに「チュートリアル」コードを追加します。*/
#include "StovePCSDK.h"
1
2
3
4
5

# 5) ビルドする

ビルド メニューからソリューションビルドを実行します。全ての設定に異常がなければコンパイルエラーは発生せず正常にビルドされます。 コンパイルエラーが発生する場合、エラーメッセージを確認し、パスの設定やPC SDKバイナリーのコピーと貼り付けが問題なく行われているか確認します。

# 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

confirm "YOUR_APP_KEY"、"YOUR_SECRET_KEY"、"YOUR_GAME_ID"はSTOVE Studio (opens new window)から事前に発行されたデータに変更する必要があります。 STOVE Studioに入店申請したSTOVEアカウントでSTOVEランチャーにログインせずに「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] IninComplte\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 occured\n -funcType: %d, result:%d, external error: %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の初期化が成功したと仮定します。

# ユーザー情報を取得

STOVEランチャーにログインしたユーザー情報を取得するには、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

# トークン情報を取得

STOVEランチャーにログインしたユーザーのトークン情報を取得するときは、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)で、ゲームサーバーはこのアクセストークンをSTOVE認証サーバーに渡してログインしたユーザーの検証を行うことができます。 アクセストークンの詳細な説明は、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

STOVEランチャーを起動しログインします。

UI画面のボタンを順番に実行しながら、正常に動作することを確認します。

Figure6

おめでとうございます!
PC SDK Nativeチュートリアルが成功的に終わりました。

Last Updated: 2023/11/22 13:25:27