QQ游戏开放平台

欢迎来到QQ游戏开放平台 登录| 管理中心 | 开发者论坛

客户端游戏接入大厅通信和打包说明

目录

客户端游戏接入QQGame游戏大厅,由大厅拉起游戏进程,并与QQGame进行数据等交互;同时,客户端游戏需要按大厅要求的格式准备安装包,大厅进行游戏的安装及更新。文档中定义大厅打安装包规则、拉起游戏进程命令行参数及与大厅通信的详细内容,对客户端进行接入时,请勿必仔细阅读此文档,确认需要实现的内容。

现QQGame游戏大厅支持两种方式与游戏建立进程间通信:websocket与管道。两种方式的命令行参数和协议格式不同,游戏可选择一种。推荐使用websocket方式,因为协议格式是json明文方式更方便联调检查。

websocket通信和协议

游戏进程命令行参数

大厅拉起游戏进程时,会带上以下命令行参数,游戏进程要进行解析使用

参数格式:id=XXXX key=YYYY pfkey=ZZZZ port=8888
参数项
id
key
pfkey
port
参数说明
Openid
Openkey
pfkey
端口号
最大长度
36

256

256


参数作用

用于游戏与后台连接,

实现拉取玩家信息、支付等功能

支付参数,详见

客户端游戏支付页接入


用于游戏和大厅建立websocket连接

大厅与游戏通信

使用websocket进行通信,大厅作为服务端,游戏作为客户端。

(1)通信连接

游戏进程从命令行参数取得Openid和端口号,拼接URL并进行websocket连接,后续通信均基于该连接进行

注意:游戏进程启动后需尽快进行连接。超时时间30秒。

例如,命令行参数是:

id=XXXX key=YYYY pfkey=ZZZZ port=8888

拼接后的URL如下:

ws://127.0.0.1:8888/websocket/XXXX

(2) 通信协议

游戏 to 大厅

项目
命令

是否必须
游戏退出
{"cmd":"game_exit"}
游戏退出前通知大厅
必须
打开页面

{

"cmd":"open_web",

"caption":"窗口标题",

"url":"https://qqgame.qq.com", "width":1440,

"height":900

}

游戏请求大厅带登录态打开页面。

仅支持腾讯域的页面

可选
打开支付

{

"cmd":"pay",

"param":"xxxxx"

}

param请参考:

客户端游戏支付页接入中的购买商品-使用大厅提供的购买页部分。

可选
购买蓝钻

{

"cmd":"buy_vip",

"param":"xxxxx"

}

param请参考:

客户端游戏支付页接入中的开通蓝钻部分。

窗口关闭后,会返回"vip_info"消息。

可选
大厅 to 游戏

项目
命令
说明
是否必须
老板键
{"cmd":"boss_key", "show":0}

游戏侧跟进参数show显示或隐藏游戏界面。

show:0隐藏,非0显示

必须
前置显示
{"cmd":"bring_to_top"}
游戏收到该消息后,前置显示界面
必须
页面关闭
{"cmd":"web_close"}
open_web请求的页面关闭时,通知游戏。
可选
支付关闭
{"cmd":"pay_close"}
支付页关闭时,通知游戏
可选

购买蓝钻

页面关闭


{"cmd":"buy_vip_close"}

购买蓝钻页面关闭,游戏需刷新蓝钻信息。参考:

/v3/user/blue_vip_info

可选

管道通信和协议(旧的连接方式,不建议使用)

游戏进程启动参数

参数格式:ID=XXX,Key=YYYY,PROCPARA=ZZZZZ
参数项
ID
Key
PROCPARA
参数说明
openid
openkey
进程通信参数
最大长度
36
256
128
参数作用
用于游戏与后台连接,实现拉取玩家信息、支付等功能
用于游戏和大厅建立进程通信,大厅通过这个连接来判断游戏是否在线,并通过这个通道来进行游戏与大厅间的数据通信
使用注意
openid、openkey,为必需项,游戏业务需要用到; PROCPARA,为必需项,大厅要求游戏必须与大厅建立进程通信。
常见反馈问题

1、游戏在安装后,会被拉起多次?

答:请在游戏进程拉起时,对启动参数进行判断,ID、Key、PROCPARA是必须的数据,如果没有这些数据,请直接退出启动流程,不要启动游戏。

进程通信

进程通信
源码示例
在《pc客户端游戏demo》中,《TestClient_Demo_C++》《TestClient_Demo_C#》两个不同语言的demo可供参考。
接入方案

两种方案如下:

1、游戏客户端有一个进程始终与大厅通信,直到游戏退出才退出;

2、游戏客户端有多个进程与大厅通信,始终保证进行通信一直存在到游戏退出,采用此方案请关注【游戏多进程与大厅连接】

通信协议
数据结构定义

#define MAX_PROCMSG_DATABUF_LEN 64*1024

typedef struct stProcMsgData

{

int nCommandID; //协议ID,下面一栏给出现有的各ID定义及用法

int nDataLen; //buffer长度

BYTE abyData[MAX_PROCMSG_DATABUF_LEN]; //buffer,如果有需要传递的数据,全部放这里

}PROCMSG_DATA;


协议ID
游戏发给大厅的:
CS_GAME_EXIT 0x00000001 游戏进程退出通知大厅

CS_REQ_NEWCONNECTION 0x0000000B 请求建立新连接

使用场景:多进程与大厅通信,详情请查阅【游戏多进程与大厅连接】部分

CS_REQ_NEWACCOUNT??0x0000000C 请求其它账号登录 需要与QQGame侧接入同事确认开通“多帐号登录”功能

CS_CLIENT_GAME_PAY_WEB  0X00000050 客户端游戏请求打开支付页面

nDataLen:长度,abyData:支付参数,字符串

支付参数请参考:客户端游戏支付页接入

CS_CLIENT_GAME_BUY_VIP_WEB  0X00000051  客户端游戏请求打开购买蓝钻页面

nDataLen:长度,abyData:支付参数,字符串

支付参数请参考:客户端游戏支付页接入

大厅发给游戏的:

SC_BOSSKEY 0x00000003 老板键

数据项:int值,0是隐藏,1是显示

使用场景:大厅老板键(Alt+Q)隐藏和显示时

SC_WND_BRINGTOP 0x00000004 通知游戏界面最新展示

使用场景:游戏窗口被其它程序遮盖,在大厅中再点app图标时,把游戏窗口拉到最前

SC_RESPONSE_NEWCONN 0x0000000B 大厅同意游戏请求新起连接

nDataLen:长度,abyData:连接名,字符串

详情请查阅【游戏多进程与大厅连接】部分

SC_RESPONSE_NEWCONN_RUFUSE 0x0000000C 大厅拒绝游戏请求新进程连接

详情请查阅【游戏多进程与大厅连接】部分

SC_CLIENT_GAME_PAY_WEB 0X00000050 大厅通知游戏购买页面关闭

SC_CLIENT_GAME_BUY_VIP_WEB 0X00000051 大厅通知游戏蓝钻购买页面关闭

购买蓝钻页面关闭,游戏需刷新蓝钻信息。参考:

拉取蓝钻信息接口

使用场景
游戏有多个进程,而且有类似的逻辑例如:Launcher.exe先运行,负责更新版本等业务,版本更新后Launcher.exe就退出,拉起游戏的主进程Main.exe;这样的情况下,由于大厅只能维护一条连接,即只识别Launcher.exe,该exe退出后,大厅会识别为游戏已经退出。 如果游戏是类似上面的这种逻辑,则需要仔细看下面内容,按下面所引导的方法接入游戏。
使用方法

(先定义场景:游戏先起A.exe,然后起B.exe,A.exe结束,后面可能又起C.exe,B.exe退出...)

游戏应该这样处理:

1、启动A.exe,用大厅启动的命令行参数中PROCPARA来与大厅建立连接;

2、退出A.exe前,向大厅发消息SC_RESPONSE_NEWCONN请求建立新连接;

3、收到大厅发来的消息SC_RESPONSE_NEWCONN后,从abyData中解出连接名,传给B.exe,与大厅建立新连接,A.exe进程结束退出;

若收到SC_RESPONSE_NEWCONN_RUFUSE,表示大厅不会建立新连接,则A.exe不能退出,这种情况很少,只是用来预防偶然因为bug导致请求新链接次数太多,陷入错误循环。

4、同理,如果又要退出B.exe,启动C.exe,则重新进行步骤2向大厅发起请求,等待回复。。。以此类推。

常见反馈问题

1、游戏在线人数不对,偏少,或者在线时长不对? 答:1)首先,请检查游戏与大厅连接是否成功,即检查是否有OnConnectSucc接口的回调; 2)其次,检查与大厅建立的连接是否一直到游戏结束时,才退出;

只有一个进程与大厅进行通信连接的情况来说,确认这个进程一直到游戏结束才退出即可;多个进程和大厅连接时,请确认连接一直都成功而且存在,直到游戏结束。 案例:某游戏有多个进程,与大厅连接的进程很早退出,但游戏主进程还在,但大厅通过进程通信检测到游戏进程已经退出,这样会判断游戏退出,导致在线数据不对。

2、游戏耗时下载资源初始化完成后,连接管道时失败?答: 大厅有管道连接30秒超时机制,当大厅启动游戏进程时就开始搭建好管道等待连接。如果30秒没有管道连接过来,会认为连接超时把之前搭建的管道清除。所以在大厅启动游戏进程后,游戏进程必须立刻连接管道,再进行耗时的初始化步骤避免此问题。

游戏安装包打包及有关配置

游戏exe版本及关联配置文件
配置文件
创建config.ini文件到游戏的第一级目录下,如已有这个文件,请直接添加下面所列内容,保证不与游戏的配置重复即可

要求文件必有的内容(数据项为例子,请参考):

[Public]

Version=30212410 ——游戏版本号,8位数字

GameID=10120 ——QQGame侧分配的游戏appid,由接入负责人分配给到

ExeName=Client.exe ——游戏进程名字,由QQGame拉起的进程

RunningExeName=snake.exe   —— 为了统一接入成长守护平台,snake.exe是用蛇蛇这款游戏举例,实际为游戏真正的进程名

[QgiMustHave]

DestRootFolder = hlddz ——游戏安装目录名字

QgiName=hlddz.qgi ——安装包名字,可按自己的版本规则合名,如hlddzBeta2.qgi


[QgiChooseHave]

NeedRegisterExe = 0 ——安装完后是否需要使用/regserver命令启动Client.exe进程

Exe版本号

8位数字,规则:

30212410=3*10000000+2*100000+124*100+10 ——> 3.2.124.10

3.2.124.10,是配置到config.ini文件ExeName项中游戏进程Client.exe的版本号,请将其确认写到Exe的文件版本中,可以通过属性来检查,举例如下图:

Exe版本号

8位数字,规则:

30212410=3*10000000+2*100000+124*100+10 ——> 3.2.124.10

3.2.124.10,是配置到config.ini文件ExeName项中游戏进程Client.exe的版本号,请将其确认写到Exe的文件版本中,可以通过属性来检查,举例如下图:


版本号要求

1、8位数字,exe属性中配置与config.ini中版本号一致;

2、游戏新版本的版本号必须递增,否则会影响更新。

游戏安装包打包指引
工具

QgiMaker,点击下载

使用方法

1、“新版本目录”请指向新版本文件的目录;

2、“旧版本目录”不需手动指定,软件自定义的默认路径即可,软件会自动将以前制作安装包时版本文件保存下来;用来直接生成部分更新包;

3、“输出目录”指定安装包生成的位置。

4、“开始”。

5、到自己指定的输出目录中,可以看到打包出来的结束,包含以下内容:

一个qgi包,一个exe包,名字都为Config.ini中QgiName中配置的名字;如果以前发布过版本,则还会存在和以前版本对应的部分安装包,qgi格式; 举例如下图所示:


安装包测试
目前是打好安装包,发布到外网测试区,进行安装测试
游戏版本发布
版本信息(发布时开发商提供)

游戏方提供新版本游戏的安装包、部分更新包(首次发布没有)给到QQGame的接口人后,还需提供如下版本信息:

最新版本号:这次发布的游戏版本号,与Config.ini中Version一致

外网最低可玩版本号:游戏要求的可运行的最低的版本号,在外网小于这个版本的,大厅会将其进行升级

提示更新版本号:小于这个版本号,大厅会提前用户有新版本可以选择更新

可部分更新版本号:从这个版本号开始的版本,都有部分更新包

第一次版本发布时,上面四个版本号都为发布版本的版本号

常见反馈问题

1、游戏下载后安装失败

请看下【Exe版本号】部分,比对config.ini中Version和exe属性中的版本号是否一致


demo演示

请见 pc客户端游戏demo



联系我们 向上
回到顶部