321 lines
10 KiB
Markdown
321 lines
10 KiB
Markdown
---
|
||
sidebarDepth: 1
|
||
---
|
||
# 联机大厅
|
||
|
||
# 索引
|
||
|
||
---
|
||
|
||
| 接口 | <div style="width: 3em"></div> | 描述 |
|
||
| --- | --- | --- |
|
||
| [GetPlayerUid](联机大厅.md#getplayeruid) | <span style="display:inline;color:#ff5555">服务端</span> | 获取玩家的uid。只有在线玩家才可获取 |
|
||
| [LobbyGetStorage](联机大厅.md#lobbygetstorage) | <span style="display:inline;color:#ff5555">服务端</span> | 获取存储的数据。仅联机大厅可用 |
|
||
| [LobbyGetStorageBySort](联机大厅.md#lobbygetstoragebysort) | <span style="display:inline;color:#ff5555">服务端</span> | 排序获取存储的数据。仅联机大厅可用 |
|
||
| [LobbySetStorageAndUserItem](联机大厅.md#lobbysetstorageanduseritem) | <span style="display:inline;color:#ff5555">服务端</span> | 设置订单已发货或者存数据。仅联机大厅可用 |
|
||
| [QueryLobbyUserItem](联机大厅.md#querylobbyuseritem) | <span style="display:inline;color:#ff5555">服务端</span> | 查询还没发货的订单。仅联机大厅可用 |
|
||
|
||
## GetPlayerUid
|
||
|
||
<span style="display:inline;color:#ff5555">服务端</span>
|
||
|
||
method in mod.server.component.httpToWebServerCompServer.HttpToWebServerCompServer
|
||
|
||
- 描述
|
||
|
||
获取玩家的uid。只有在线玩家才可获取
|
||
|
||
- 参数
|
||
|
||
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
|
||
| :--- | :--- | :--- |
|
||
| playerId | str | 玩家实体id |
|
||
|
||
- 返回值
|
||
|
||
| <div style="width: 4em">数据类型</div> | 说明 |
|
||
| :--- | :--- |
|
||
| int | 玩家uid |
|
||
|
||
- 示例
|
||
|
||
```python
|
||
import mod.server.extraServerApi as serverApi
|
||
comp = serverApi.GetEngineCompFactory().CreateHttp(levelId)
|
||
uid = comp.GetPlayerUid(playerId)
|
||
```
|
||
|
||
|
||
|
||
## LobbyGetStorage
|
||
|
||
<span style="display:inline;color:#ff5555">服务端</span>
|
||
|
||
method in mod.server.component.httpToWebServerCompServer.HttpToWebServerCompServer
|
||
|
||
- 描述
|
||
|
||
获取存储的数据。仅联机大厅可用
|
||
|
||
- 参数
|
||
|
||
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
|
||
| :--- | :--- | :--- |
|
||
| 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 # 数据的值
|
||
},
|
||
...
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
- 示例
|
||
|
||
```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
|
||
|
||
<span style="display:inline;color:#ff5555">服务端</span>
|
||
|
||
method in mod.server.component.httpToWebServerCompServer.HttpToWebServerCompServer
|
||
|
||
- 描述
|
||
|
||
排序获取存储的数据。仅联机大厅可用
|
||
|
||
- 参数
|
||
|
||
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
|
||
| :--- | :--- | :--- |
|
||
| callback | function | 请求回调函数 |
|
||
| key | str | 查询数据的key。在开发者平台上配置的可排序的key才可以查询 |
|
||
| ascend | bool | 是否升序 |
|
||
| offset | int | 从排序后的第几个数据开始返回(从0开始计算) |
|
||
| length | int | 返回多少个数据,上限为50 |
|
||
|
||
- 返回值
|
||
|
||
无
|
||
|
||
- 备注
|
||
- 全局数据(即uid为0)不参与排序
|
||
- 返回的结果不一定是最新数据,建议只用来作客户端显示,获取业务逻辑所需的数据请使用[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
|
||
|
||
<span style="display:inline;color:#ff5555">服务端</span>
|
||
|
||
method in mod.server.component.httpToWebServerCompServer.HttpToWebServerCompServer
|
||
|
||
- 描述
|
||
|
||
设置订单已发货或者存数据。仅联机大厅可用
|
||
|
||
- 参数
|
||
|
||
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
|
||
| :--- | :--- | :--- |
|
||
| 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
|
||
|
||
<span style="display:inline;color:#ff5555">服务端</span>
|
||
|
||
method in mod.server.component.httpToWebServerCompServer.HttpToWebServerCompServer
|
||
|
||
- 描述
|
||
|
||
查询还没发货的订单。仅联机大厅可用
|
||
|
||
- 参数
|
||
|
||
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
|
||
| :--- | :--- | :--- |
|
||
| 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)
|
||
```
|
||
|
||
|
||
|