# 服务端SDK-SDOBASE
# 功能说明
用于和认证/计费服务端通信的客户端组件,包含以下功能
- 拉取授权配置(授权联系王智涛处理)
- 建立维护和认证/计费服务端的tcp链接
- 使用自定义数据协议发送业务请求和解析业务响应
# 文件列表
# 开发文件
文件路径 | 文件作用 | 补充说明 |
---|---|---|
SdoBase.h | sdk提供的功能接口定义 | 有时提供的文件也会命名为CommonSDK.h |
SdoBase.lib | 静态链接库 | 有时提供的文件也会命名为CommonSDK.lib |
# 运行文件
文件路径 | 文件作用 | 补充说明 |
---|---|---|
sdobase.dll | 动态链接库 | 有时提供的文件也会命名为CommonSDK.dll |
services/ | 业务接口描述文件存放目录 | 业务接口文件使用xml格式编制 |
client.conf | 配置文件 | 配置项如下 1、ServerAddr:授权配置服务器地址,多个地址使用";"分隔,用于拉取授权信息 2、LocalPort:SDK绑定的本地端口 3、HostName:主机别名 4、StackMsgTimeOut:网络层消息超时时间(s) 5、MaxAckMsgCacheNumber:必答消息最大缓存数量 6、MaxAckMsgCacheSize:单个必答消息最大长度 7、BusinessMsgTimeOut:业务层消息超时时间 8、MaxMsgQueueSize:消息队列最大长度 9、AutoUnLock:是否自动发送解冻消息 |
KeyWordId.xml | 授权配置项 | 内部使用,使用固定文件内容 |
log.properties | 日志配置文件 |
# 接口定义
# 验证票据
<?xml version="1.0" encoding="UTF-8"?>
<service name="VerifyServer" id="24" serviceencoding="utf-8" sdkencoding="gbk">
<type name="App-Id-IN" class="int" code="2401"/>
<type name="Area-Id-IN" class="int" code="2402"/>
<type name="App-Id-OUT" class="int" code="2401"/>
<type name="Area-Id-OUT" class="int" code="2402"/>
<type name="Session-Id" class="string" code="2403"/>
<type name="Verify-Cost" class="string" code="2404"/>
<type name="Idcard-Checked" class="string" code="2405"/>
<type name="PGT-Type" class="string" code="2406"/>
<type name="RetIdcardFlag" class="string" code="2407"/>
<type name="Pt-Id" class="string" code="1"/>
<type name="Snda-Id" class="string" code="2"/>
<type name="U-Id" class="string" code="3"/>
<type name="Id-Card" class="string" code="4"/>
<type name="Identity-State" class="string" code="5"/>
<type name="Client-IP" class="string" code="6"/>
<type name="Sub-App" class="string" code="7"/>
<type name="Game-Account" class="string" code="8"/>
<type name="Ekey-Type" class="string" code="9"/>
<type name="Ekey-Bind-Flag" class="string" code="10"/>
<type name="Client-Signature" class="string" code="11"/>
<type name="Ekey-SN" class="string" code="12"/>
<type name="Ecard-Type" class="string" code="13" />
<type name="Ecard-SN" class="string" code="14"/>
<type name="Input-Account" class="string" code="15"/>
<type name="Ecard-Bind-Flag" class="string" code="16"/>
<type name="Auto-Login-Flag" class="string" code="17"/>
<type name="Voice-Bind-Flag" class="string" code="18"/>
<type name="Voice-SN" class="string" code="19"/>
<type name="UpgradeFlag" class="string" code="20"/>
<type name="CompanyId" class="string" code="21"/>
<type name="AppIdTransFlag" class="string" code="22"/>
<type name="Forbidden-Account" class="string" code="100"/>
<type name="qinzi" class="string" code="101"/>
<type name="Golden-Account" class="string" code="102"/>
<type name="CdLock-Account" class="string" code="103"/>
<type name="CdLock-Storage" class="string" code="104"/>
<type name="Adult" class="string" code="105"/>
<type name="Appling-Adult" class="string" code="106"/>
<type name="Spreaded-User" class="string" code="107"/>
<type name="OnlineSMS-Notice" class="string" code="108"/>
<type name="Spreader" class="string" code="109"/>
<type name="Wealth-Card" class="string" code="110"/>
<type name="Item-Transfer" class="string" code="111"/>
<type name="AppIds_type" class="string" code="112"/>
<type name="FirstValidate" class="int" code="113"/>
<type name="firstLoginValidate" class="int" code="114"/>
<type name="firstLoginAppId" class="int" code="115"/>
<type name="userIdType" class="int" code="116"/>
<type name="loginEndpointIp" class="string" code="117"/>
<type name="firstLoginApp" class="int" code="118"/>
<type name="displayAccount" class="string" code="119"/>
<type name="loginType" class="int" code="120"/>
<type name="gameValue" class="string" code="121"/>
<type name="isForbiddenNewActive" class="int" code="123"/>
<type name="TI_verifyPhoneStatus" class="int" code="124"/>
<type name="TI_isDynamicPwdSet" class="int" code="125" />
<type name="thirdUserId" class="string" code="126"/>
<type name="TS_scene" class="string" code="127"/>
<type name="isStaticPwdLocked" class="int" code="128" />
<message name="ReserveNotify" id="101">
<requestParameter>
<field name="appId" type="App-Id-IN" desc="[整数型] 应用id"/>
<field name="areaId" type="Area-Id-IN" desc="[整数型] 区id"/>
<field name="sessionId" type="Session-Id" desc="[字符串型] 票据"/>
</requestParameter>
<responseParameter>
<field name="appId" type="App-Id-OUT" desc="[整数型] 应用id"/>
<field name="areaId" type="Area-Id-OUT" desc="[整数型] 区id"/>
<field name="verifyCost" type="Verify-Cost" desc="--废弃--"/>
<field name="idcardChecked" type="Idcard-Checked" desc="--废弃--"/>
<field name="proxyTicket" type="PGT-Type" desc="[字符串型] 代理票据"/>
<field name="ptId" type="Pt-Id" desc="[字符串型] PT账号"/>
<field name="sndaId" type="Snda-Id" desc="[字符串型] 数字账号"/>
<field name="uId" type="U-Id" desc="--废弃--"/>
<field name="idCard" type="Id-Card" desc="--废弃--"/>
<field name="identityState" type="Identity-State" desc="--废弃--"/>
<field name="clientIp" type="Client-IP" desc="[字符串型] 登录的客户端ip"/>
<field name="subApp" type="Sub-App" desc="[字符串型] 账号属性标识(1=禁止登录、3=金牌账号、4=CD卡绑定账号、5=CD卡绑定仓库、6=成年人、7=已实名、8=下家、9=上线提醒、10=推广员、11=财富卡、12=极品道具异动),多个属性标识通过|分隔"/>
<field name="forbiddenAccount" type="Forbidden-Account" desc="[字符串型] 账号是否有‘禁止登录’属性:Y=是,N=否" />
<field name="goldenAccount" type="Golden-Account" desc="[字符串型] 账号是否有‘金牌账号’属性:Y=是,N=否"/>
<field name="cdLockAccount" type="CdLock-Account" desc="[字符串型] 账号是否有‘CD卡绑定账号’属性:Y=是,N=否"/>
<field name="cdLockStorage" type="CdLock-Storage" desc="[字符串型] 账号是否有‘CD卡绑定仓库’属性:Y=是,N=否"/>
<field name="adult" type="Adult" desc="[字符串型] 账号是否有‘成年人’属性:Y=是,N=否"/>
<field name="applingAdult" type="Appling-Adult" desc="[字符串型] 账号是否有‘已实名’属性:Y=是,N=否"/>
<field name="spreadedUser" type="Spreaded-User" desc="[字符串型] 账号是否有‘下家’属性:Y=是,N=否"/>
<field name="onlineSMSNotice" type="OnlineSMS-Notice" desc="[字符串型] 账号是否有‘上线提醒’属性:Y=是,N=否"/>
<field name="spreader" type="Spreader" desc="[字符串型] 账号是否有‘推广员’属性:Y=是,N=否"/>
<field name="wealthCard" type="Wealth-Card" desc="[字符串型] 账号是否有‘财富卡’属性:Y=是,N=否"/>
<field name="itemTransfer" type="Item-Transfer" desc="[字符串型] 账号是否有‘极品道具异动’属性:Y=是,N=否"/>
<field name="gameAccount" type="Game-Account" desc="[字符串型] 登录的客户端ip"/>
<field name="ekeyType" type="Ekey-Type" desc="[字符串型] 认证系统给游戏生成的账号标识(部分游戏需要)"/>
<field name="ekeyBindFlag" type="Ekey-Bind-Flag" desc="[字符串型] 密宝绑定标志" />
<field name="clientSignature" type="Client-Signature" desc="--废弃--"/>
<field name="ekeySN" type="Ekey-SN" desc="[字符串型] 密宝序列号" />
<field name="ecardType" type="Ecard-Type" desc="[字符串型] 安全卡绑定标志" />
<field name="ecardSN" type="Ecard-SN" desc="[字符串型] 安全卡序列号" />
<field name="inputAccount" type="Input-Account" desc="[字符串型] 输入账号" />
<field name="ecardBindFlag" type="Ecard-Bind-Flag" desc="[字符串型] 安全卡绑定标志" />
<field name="autoLoginFlag" type="Auto-Login-Flag" desc="[字符串型] 是否开启自动登录:1=是,0=否" />
<field name="voiceBindFlag" type="Voice-Bind-Flag" desc="--废弃--"/>
<field name="voiceSN" type="Voice-SN" desc="--废弃--"/>
<field name="UpgradeFlag" type="UpgradeFlag" desc="--废弃--"/>
<field name="CompanyId" type="CompanyId" desc="[字符串型] 合作三方标识"/>
<field name="AppIdTransFlag" type="AppIdTransFlag" desc="--废弃--"/>
<field name="loginEndpointIp" type="loginEndpointIp" desc="[字符串型] 登录客户端ip" />
<field name="displayAccount" type="displayAccount" desc="[字符串型] 账号用于显示的字符串" />
<field name="verifyPhoneStatus" type="TI_verifyPhoneStatus" desc="[整数型] 安全手机绑定状态,1=未绑定、2=绑定并验证期中、3=绑定并已通过验证期" />
<field name="isDynamicPwdSet" type="TI_isDynamicPwdSet" desc="[整数型] 游戏锁设置情况:0=关闭、2=仓库/元宝开启、3=仓库/元宝/角色开启;开启了游戏锁的游戏资源需要验证叨鱼动密后解除限制" />
<field name="thirdUserId" type="thirdUserId" desc="[字符串型] 合作三方账号标识" />
<field name="isStaticPwdLocked" type="isStaticPwdLocked" desc="[字符串型]是否开启了静密锁:0=否、1=是" />
</responseParameter>
</message>
</service>
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# 示例代码
引用头文件
#include "CommonSDK.h"
1
业务响应回调处理
int VerifyServerCallBack(EMsgDirection eMsgType, unsigned int dwRpcId, int nResult,const ISDOCommonMsg* pResponse) { if(eMsgType==E_REQUEST) { return 0; } else { ISDOCommonMsg *pMsg = (ISDOCommonMsg *)pResponse; char *pServiceName = pMsg->GetMsgName(); if(pServiceName!=NULL && strcasecmp(pServiceName, "VerifyServer.ReserveNotify")== 0) { //处理业务响应 char szSndaId[16] = {0}; pMsg->GetValue("sndaId", &szSndaId); } return 0; } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
初始化
ISDOCommonHandler *handle = sdoCreateCommonHandler(); if (null!=handle) { if (0==handle->Initialize("client.conf", "v1.2.1")) { handle->RegisterCallback("VerifyServer", VerifyServerCallBack); } }
1
2
3
4
5
6
7
8
业务请求
ISDOCommonMsg *request = sdoCreateMsg(E_REQUEST, "VerifyServer.ReserveNotify"); request->SetValue("appId", 1); request->SetValue("areaId", 1); request->SetValue("sessionId", "xxxxxx"); if (0==handle->ASyncSendMsg(request, handle->GetRpcId())) { // 提交成功 } else { //提交失败 }
1
2
3
4
5
6
7
8
9
10
11
12
# 问题排查
← SDO 服务端API 防沉迷 业务介绍 →