# PC SDK Native示例
这是说明Windows Native开发环境中用C++语言连接STOVE PC SDK的方法的示例。
在进行示例例题之前,应事先设置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
文件夹的下方。
StovePCSDK复制完成后,运行 Visual Studio,选择 HelloStove.sln 加载项目 。
# 1) C/C++
: 设置`添加目录'
打开项目属性页( Alt + F7), 添加 StovePCSDK_{版本号}/include
路径到配置属性的 添加目录
中。
$(SolutionDir)StovePCSDK_2.1.0\include
# 2) 链接
: 设置附加库目录
在项目属性页面上, 添加StovePCSDK_{版本号}/bin
文件夹路径, 用于链接器- 常规
构成属性的附加库目录
。
$(SolutionDir)StovePCSDK_2.1.0\bin\$(Platform)\$(Configuration)
# 3) 设置附加依附性
在项目属性页面上, 链接-输入
构成属性的附加从属性
里添加StovePCSDK.lib
。请注意,Debug 和 Release 配置添加的从属性不同的话,名称也不同。
Debug为StovePCSDKd.lib
( d 后缀)。 Release为StovePCSDK.lib
。
> Debug 模式: StovePCSDKd.lib
> Release 模式: StovePCSDK.lib
2
- 进行到这里后,建立项目,确认是否发生错误。 如果发生错误,按顺序检查上述过程以解决问题。
# 4) 修改HelloStoveDlg.h头文件
打开HelloStove项目的HelloStoveDlg.h
文件, 添加以下代码:
#pragma once
#include `afxwin.h`
/*在此添加`示例`代码。*/
#include `StovePCSDK.h`
2
3
4
5
# 5) 出包
在Build
菜单中运行Solution Build
,如果正常进行了上述所有设定,则不会出现错误,并正常出包。
发生Build错误时, 检查错误消息, 检查项目配置路径是否存在错误、 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
YOUR_APP_KEY
、YOUR_SECRET_KEY
、YOUR_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);
}
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::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`);
}
}
...
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
以下示例代码假定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`);
}
}
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
# 获取令牌信息
获取登录到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`);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
令牌是什么? 登录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);
}
2
3
4
5
6
7
8
9
10
# 出包和运行
用StovePCSDK_{版本号}\bin\{平台}\Release
文件夹覆盖HelloStove_Native\bin\{平台}\Release
文件夹 。
运行STOVE客户端并登录。
现在,按F5
来建立和运行HelloStove
项目。
按顺序运行 UI 屏幕上的按钮, 确认是否正常运行。
祝贺您!
成功完成 PC SDK Native 示例 。