--- sidebarDepth: 1 --- # 联机大厅 # 索引 --- | 接口 |
| 描述 | | --- | --- | --- | | [GetPlayerUid](联机大厅.md#getplayeruid) | 服务端 | 获取玩家的uid。只有在线玩家才可获取 | | [LobbyGetStorage](联机大厅.md#lobbygetstorage) | 服务端 | 获取存储的数据。仅联机大厅可用 | | [LobbyGetStorageBySort](联机大厅.md#lobbygetstoragebysort) | 服务端 | 排序获取存储的数据。仅联机大厅可用 | | [LobbySetStorageAndUserItem](联机大厅.md#lobbysetstorageanduseritem) | 服务端 | 设置订单已发货或者存数据。仅联机大厅可用 | | [QueryLobbyUserItem](联机大厅.md#querylobbyuseritem) | 服务端 | 查询还没发货的订单。仅联机大厅可用 | ## GetPlayerUid 服务端 method in mod.server.component.httpToWebServerCompServer.HttpToWebServerCompServer - 描述 获取玩家的uid。只有在线玩家才可获取 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | playerId | str | 玩家实体id | - 返回值 |
数据类型
| 说明 | | :--- | :--- | | int | 玩家uid | - 示例 ```python import mod.server.extraServerApi as serverApi comp = serverApi.GetEngineCompFactory().CreateHttp(levelId) uid = comp.GetPlayerUid(playerId) ``` ## LobbyGetStorage 服务端 method in mod.server.component.httpToWebServerCompServer.HttpToWebServerCompServer - 描述 获取存储的数据。仅联机大厅可用 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | callback | function | 请求回调函数 | | uid | int | 玩家uid,如果传0表示获取全局数据 | | keys | list(str) | 查询数据的key列表,排序key与非排序key都可获取 | - 返回值 无 - 备注 - 可以使用uid为0,key为op_config获取开发者平台的运营管理配置中配置的json - callback需要接受一个参数 当请求失败时,参数返回None,当请求成功时,参数为一个dict,格式如下。(获取的key如果没有设置过,就不会出现在返回的最新数据中) ```python { "entity": { "data": [ { "key": str, # 数据的key "value": int/float/str # 数据的值 }, ... ] } } ``` - **该接口有调用频率限流,同一个组件所有联机大厅房间的请求频率最多为每秒200次。如果请求超过该频率会导致阻塞,请求的相应时间变长。** - 示例 ```python import mod.server.extraServerApi as serverApi comp = serverApi.GetEngineCompFactory().CreateHttp(levelId) def cb(data): if data: print { i["key"]: i["value"] for i in data["entity"]["data"] } else: print "获取数据失败" keys = ["money"] comp.LobbyGetStorage(cb, uid, keys) ``` ## LobbyGetStorageBySort 服务端 method in mod.server.component.httpToWebServerCompServer.HttpToWebServerCompServer - 描述 排序获取存储的数据。仅联机大厅可用 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | callback | function | 请求回调函数 | | key | str | 查询数据的key。在开发者平台上配置的可排序的key才可以查询 | | ascend | bool | 是否升序 | | offset | int | 从排序后的第几个数据开始返回(从0开始计算) | | length | int | 返回多少个数据,上限为50 | - 返回值 无 - 备注 - 全局数据(即uid为0)不参与排序 - 最多只能获取前200的数据(升序前200及降序前200) - 返回的结果不一定是最新数据,会有两分钟的刷新间隔,建议只用来作客户端显示,获取业务逻辑所需的数据请使用[LobbyGetStorage](#lobbygetstorage) - callback需要接受一个参数 当请求失败时,参数返回None,当请求成功时,参数为一个dict,格式如下。(获取的key如果没有设置过,就不会出现在返回的最新数据中) ```python { "entity": { "data": [ { "uid": int, # 玩家uid "nickname": str # 玩家的用户名 "value": int/float/str, # 数据的值 }, ... ] } } ``` - 示例 ```python import mod.server.extraServerApi as serverApi comp = serverApi.GetEngineCompFactory().CreateHttp(levelId) def cb(data): if data: print data["entity"]["data"] else: print "获取数据失败" # 获取money从大到小排序第1到第50的数据 comp.LobbyGetStorageBySort(cb, 'money', False, 0, 50) # 获取money从大到小排序第51到第100的数据 comp.LobbyGetStorageBySort(cb, 'money', False, 50, 50) ``` ## LobbySetStorageAndUserItem 服务端 method in mod.server.component.httpToWebServerCompServer.HttpToWebServerCompServer - 描述 设置订单已发货或者存数据。仅联机大厅可用 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | callback | function | 请求回调函数 | | uid | int | 玩家uid,如果传0表示设置全局数据 | | orderId | int或None | 订单Id,可选 | | entitiesGetter | function或None | 用于返回存储的数据的函数,可选 | - 返回值 无 - 备注 - uid为0,key为op_config对应开发者平台的运营管理配置中配置的json,使用这个接口时请避免覆盖掉 - callback需要接受一个参数 当请求**失败**时,参数返回None。 当请求**成功**时,参数为一个dict,包含返回码,最新数据等信息。 - 当code为0时,表示设置成功。 - 当code为2时,表示数据冲突,例如多个房间同时设置同一个玩家的数据或者全局数据。 - 当code为5时,表示订单冲突,例如该订单已经标记为发货了。 当请求成功时,无论返回码是多少,都应该使用返回的最新数据更新本地数据。 当数据冲突时,callback回调结束后会自动重新调用entitiesGetter获取数据并发起重试。 当订单冲突时,callback回调结束后不会重试。 (当发生冲突时,设置的key如果之前没有设置过,就不会出现在返回的最新数据中)) 具体格式如下: ```python { “code”: int, # 返回码 "message": str # 返回信息 "entity": { "data": [ # 数据库最新值 { "key": str, # 数据的key "value": object # 数据的值 }, ... ] } } ``` - entitiesGetter需要返回一个list(dict),格式为: ```python [ { "key": str, # 数据的key,长度最大为64个字符 # uid为0,key为op_config对应开发者平台的运营管理配置中配置的json,请注意避免覆盖掉 "value": object # 数据的值 # 1. 如果是排序的key,value只能是int或者long,范围为-2^63到2^63-1 # 2. 如果是非排序的key,value需要是可以被json序列化的对象,如int/float/str/list/dict等 # 该object序列化为json字符串后,最大不能超过1024*1024个字符 # 中文字符串需要是utf8编码,不要用unicode # 请留意json跟dict的区分,例如json的key一定要是字符串,json没有tuple等 }, ... ] ``` - **该接口有调用频率限流,同一个组件所有联机大厅房间的请求频率最多为每秒50次。如果请求超过该频率会导致阻塞,请求的相应时间变长。** - 同一个uid的LobbyGetStorage与LobbySetStorageAndUserItem调用会保证顺序执行 - 示例 ```python import mod.server.extraServerApi as serverApi comp = serverApi.GetEngineCompFactory().CreateHttp(levelId) playerId = "12345" orderId = 12345 money = { playerId: 100 } def cb(data): if data: # 更新本地数据 newData = { i["key"]: i["value"] for i in data["entity"]["data"] } money[playerId] = newData["money"] else: print "发货/设置数据失败" def getter(): return [ { "key": "money", "value": money[playerId] + 100 } ] comp.LobbySetStorageAndUserItem(cb, uid, orderId, getter) ``` ## QueryLobbyUserItem 服务端 method in mod.server.component.httpToWebServerCompServer.HttpToWebServerCompServer - 描述 查询还没发货的订单。仅联机大厅可用 - 参数 | 参数名 |
数据类型
| 说明 | | :--- | :--- | :--- | | callback | function | 请求回调函数 | | uid | int | 玩家uid | - 返回值 无 - 备注 - callback需要接受一个参数 当请求失败时,参数返回None,当请求成功时,参数为一个dict,格式为: ```python { "entity": { "orders": [ { "order_id": int, # 订单id "timestamp": int, # 购买时间 "cmd": str # 实现指令 "product_count": int # 购买数量。目前不允许一次购买多个,所以返回都是1 }, ... ] } } ``` - 示例 ```python import mod.server.extraServerApi as serverApi comp = serverApi.GetEngineCompFactory().CreateHttp(levelId) def cb(data): if data: print data["entity"]["orders"] else: print "查询订单失败" comp.QueryLobbyUserItem(cb, uid) ```