# PC SDK Native示例

这是说明Windows Native开发环境中用C++语言连接STOVE PC SDK的方法的示例。

confirm 在进行示例例题之前,应事先设置STOVE客户端 (opens new window),并参考SDK开发环境准备,提前发放Appkey、Appsecret、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), 添加 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。请注意,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) 出包

Build菜单中运行Solution Build,如果正常进行了上述所有设定,则不会出现错误,并正常出包。 发生Build错误时, 检查错误消息, 检查项目配置路径是否存在错误、 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

confirm YOUR_APP_KEYYOUR_SECRET_KEYYOUR_GAME_ID必须更改为STOVE Studio (opens new window)事先发放的数据。 如果没有通过申请入驻STOVE Studio的stove 帐户登录STOVE客户端,调用stove PC_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::OnBnClicked UnInit函数中添加用于调用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函数进行确认 。 添加到 CHelloStoveDlg:: OnBnClickedGetUser函数以确认 StovePC_GetUser函数中的动作。

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,游戏服务器可以将该Access Token传达给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

运行STOVE客户端并登录。

现在,按F5来建立和运行HelloStove项目。
按顺序运行 UI 屏幕上的按钮, 确认是否正常运行。

Figure6

祝贺您!
成功完成 PC SDK Native 示例 。

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