Skip to content

Commit 927e3df

Browse files
committed
Update kbemain.py
1 parent 32ac2b1 commit 927e3df

File tree

1 file changed

+136
-139
lines changed
  • kbe/res/sdk_templates/server/python_assets/scripts/interface

1 file changed

+136
-139
lines changed
Lines changed: 136 additions & 139 deletions
Original file line numberDiff line numberDiff line change
@@ -1,139 +1,136 @@
1-
# -*- coding: utf-8 -*-
2-
import os
3-
import KBEngine
4-
from KBEDebug import *
5-
from Poller import Poller
6-
7-
"""
8-
interfaces进程主要处理KBEngine服务端与第三方平台的接入接出工作。
9-
(注意:由于interfaces是一个单线程服务器,如果需要使用python的http服务器库,建议使用异步的(例如:Tornado),否则会卡主线程造成阻塞。对外http请求可以使用KBEngine.urlopen异步请求。))
10-
目前支持几种功能:
11-
1: 注册账号
12-
当客户端请求注册账号后,请求会由loginapp转发到dbmgr,如果dbmgr挂接了interfaces,则dbmgr将请求转发至这里(KBEngine.onRequestCreateAccount)
13-
此时脚本收到这个请求之后可以使用各种方式与第三方平台通信,可以使用python的http库也能直接使用socket,当与第三方平台交互完毕之后应该将
14-
交互的结果返回给引擎baseapp层,通过KBEngine.createAccountResponse能够将信息推送到baseapp层。
15-
16-
2:账号登陆
17-
当客户端请求登陆账号后,请求会由loginapp转发到dbmgr,如果dbmgr挂接了interfaces,则dbmgr将请求转发至这里(KBEngine.onRequestAccountLogin)
18-
此时脚本收到这个请求之后可以使用各种方式与第三方平台通信,可以使用python的http库也能直接使用socket,当与第三方平台交互完毕之后应该将
19-
交互的结果返回给引擎baseapp层层,通过KBEngine.accountLoginResponse能够将信息推送到baseapp层。
20-
21-
3:充值计费
22-
当baseapp上请求计费entity.charge()后,请求会由loginapp转发到dbmgr,如果dbmgr挂接了interfaces,则dbmgr将请求转发至这里(KBEngine.onRequestCharge)
23-
此时脚本收到这个请求之后可以使用各种方式与第三方平台通信,可以使用python的http库也能直接使用socket,当与第三方平台交互完毕之后应该将
24-
交互的结果返回给引擎baseapp层,通过KBEngine.chargeResponse能够将信息推送到baseapp层entity.charge时给入的回调或者回调到onLoseChargeCB接口。
25-
26-
某些平台要求客户端直接与平台请求计费,平台采用回调服务器的方式来完成请求, 参考“平台回调”。
27-
28-
4: 平台回调
29-
要完成此功能应该在脚本层创建一个socket,
30-
并将socket挂接到KBEngine中(这样可防止阻塞导致主线程卡),然后监听指定的端口。
31-
使用KBE的KBEngine.registerReadFileDescriptor()和KBEngine.registerWriteFileDescriptor(),具体查看API文档与Poller.py。
32-
"""
33-
34-
g_poller = Poller()
35-
36-
def onInterfaceAppReady():
37-
"""
38-
KBEngine method.
39-
interfaces已经准备好了
40-
"""
41-
INFO_MSG('onInterfaceAppReady: bootstrapGroupIndex=%s, bootstrapGlobalIndex=%s' % \
42-
(os.getenv("KBE_BOOTIDX_GROUP"), os.getenv("KBE_BOOTIDX_GLOBAL")))
43-
44-
#KBEngine.addTimer(0.01, 1.0, onTick)
45-
g_poller.start("localhost", 30040)
46-
47-
def onTick(timerID):
48-
"""
49-
"""
50-
INFO_MSG('onTick()')
51-
52-
def onInterfaceAppShutDown():
53-
"""
54-
KBEngine method.
55-
这个interfaces被关闭前的回调函数
56-
"""
57-
INFO_MSG('onInterfaceAppShutDown()')
58-
g_poller.stop()
59-
60-
def onRequestCreateAccount(registerName, password, datas):
61-
"""
62-
KBEngine method.
63-
请求创建账号回调
64-
@param registerName: 客户端请求时所提交的名称
65-
@type registerName: string
66-
67-
@param password: 密码
68-
@type password: string
69-
70-
@param datas: 客户端请求时所附带的数据,可将数据转发第三方平台
71-
@type datas: bytes
72-
"""
73-
INFO_MSG('onRequestCreateAccount: registerName=%s' % (registerName))
74-
75-
commitName = registerName
76-
77-
# 默认账号名就是提交时的名
78-
realAccountName = commitName
79-
80-
# 此处可通过http等手段将请求提交至第三方平台,平台返回的数据也可放入datas
81-
# datas将会回调至客户端
82-
# 如果使用http访问,因为interfaces是单线程的,同步http访问容易卡住主线程,建议使用
83-
# KBEngine.registerReadFileDescriptor()和KBEngine.registerWriteFileDescriptor()结合
84-
# KBEngine.urlopen("https://www.baidu.com",onHttpCallback)异步访问。也可以结合socket的方式与平台交互。
85-
86-
KBEngine.createAccountResponse(commitName, realAccountName, datas, KBEngine.SERVER_SUCCESS)
87-
88-
def onRequestAccountLogin(loginName, password, datas):
89-
"""
90-
KBEngine method.
91-
请求登陆账号回调
92-
@param loginName: 客户端请求时所提交的名称
93-
@type loginName: string
94-
95-
@param password: 密码
96-
@type password: string
97-
98-
@param datas: 客户端请求时所附带的数据,可将数据转发第三方平台
99-
@type datas: bytes
100-
"""
101-
INFO_MSG('onRequestAccountLogin: registerName=%s' % (loginName))
102-
103-
commitName = loginName
104-
105-
# 默认账号名就是提交时的名
106-
realAccountName = commitName
107-
108-
# 此处可通过http等手段将请求提交至第三方平台,平台返回的数据也可放入datas
109-
# datas将会回调至客户端
110-
# 如果使用http访问,因为interfaces是单线程的,同步http访问容易卡住主线程,建议使用
111-
# KBEngine.registerReadFileDescriptor()和KBEngine.registerWriteFileDescriptor()结合
112-
# KBEngine.urlopen("https://www.baidu.com",onHttpCallback)异步访问。也可以结合socket的方式与平台交互。
113-
114-
# 如果返回码为KBEngine.SERVER_ERR_LOCAL_PROCESSING则表示验证登陆成功,但dbmgr需要检查账号密码,KBEngine.SERVER_SUCCESS则无需再检查密码
115-
KBEngine.accountLoginResponse(commitName, realAccountName, datas, KBEngine.SERVER_ERR_LOCAL_PROCESSING)
116-
117-
def onRequestCharge(ordersID, entityDBID, datas):
118-
"""
119-
KBEngine method.
120-
请求计费回调
121-
@param ordersID: 订单的ID
122-
@type ordersID: uint64
123-
124-
@param entityDBID: 提交订单的实体DBID
125-
@type entityDBID: uint64
126-
127-
@param datas: 客户端请求时所附带的数据,可将数据转发第三方平台
128-
@type datas: bytes
129-
"""
130-
INFO_MSG('onRequestCharge: entityDBID=%s, entityDBID=%s' % (ordersID, entityDBID))
131-
132-
# 此处可通过http等手段将请求提交至第三方平台,平台返回的数据也可放入datas
133-
# datas将会回调至baseapp的订单回调中,具体参考API手册charge
134-
# 如果使用http访问,因为interfaces是单线程的,同步http访问容易卡住主线程,建议使用
135-
# KBEngine.registerReadFileDescriptor()和KBEngine.registerWriteFileDescriptor()结合
136-
# KBEngine.urlopen("https://www.baidu.com",onHttpCallback)异步访问。也可以结合socket的方式与平台交互。
137-
138-
KBEngine.chargeResponse(ordersID, datas, KBEngine.SERVER_SUCCESS)
139-
1+
# -*- coding: utf-8 -*-
2+
import os
3+
import KBEngine
4+
from KBEDebug import *
5+
from Poller import Poller
6+
7+
"""
8+
interfaces进程主要处理KBEngine服务端与第三方平台的接入接出工作。
9+
(注意:由于interfaces是一个单线程服务器,如果需要使用python的http服务器库,建议使用异步的(例如:Tornado),否则会卡主线程造成阻塞。对外http请求可以使用KBEngine.urlopen异步请求。))
10+
目前支持几种功能:
11+
1: 注册账号
12+
当客户端请求注册账号后,请求会由loginapp转发到dbmgr,如果dbmgr挂接了interfaces,则dbmgr将请求转发至这里(KBEngine.onRequestCreateAccount)
13+
此时脚本收到这个请求之后可以使用各种方式与第三方平台通信,可以使用python的http库也能直接使用socket,当与第三方平台交互完毕之后应该将
14+
交互的结果返回给引擎baseapp层,通过KBEngine.createAccountResponse能够将信息推送到baseapp层。
15+
16+
2:账号登陆
17+
当客户端请求登陆账号后,请求会由loginapp转发到dbmgr,如果dbmgr挂接了interfaces,则dbmgr将请求转发至这里(KBEngine.onRequestAccountLogin)
18+
此时脚本收到这个请求之后可以使用各种方式与第三方平台通信,可以使用python的http库也能直接使用socket,当与第三方平台交互完毕之后应该将
19+
交互的结果返回给引擎baseapp层层,通过KBEngine.accountLoginResponse能够将信息推送到baseapp层。
20+
21+
3:充值计费
22+
当baseapp上请求计费entity.charge()后,请求会由loginapp转发到dbmgr,如果dbmgr挂接了interfaces,则dbmgr将请求转发至这里(KBEngine.onRequestCharge)
23+
此时脚本收到这个请求之后可以使用各种方式与第三方平台通信,可以使用python的http库也能直接使用socket,当与第三方平台交互完毕之后应该将
24+
交互的结果返回给引擎baseapp层,通过KBEngine.chargeResponse能够将信息推送到baseapp层entity.charge时给入的回调或者回调到onLoseChargeCB接口。
25+
26+
某些平台要求客户端直接与平台请求计费,平台采用回调服务器的方式来完成请求, 参考“平台回调”。
27+
28+
4: 平台回调
29+
要完成此功能应该在脚本层创建一个socket,
30+
并将socket挂接到KBEngine中(这样可防止阻塞导致主线程卡),然后监听指定的端口。
31+
使用KBE的KBEngine.registerReadFileDescriptor()和KBEngine.registerWriteFileDescriptor(),具体查看API文档与Poller.py。
32+
"""
33+
34+
g_poller = Poller()
35+
36+
def onInterfaceAppReady():
37+
"""
38+
KBEngine method.
39+
interfaces已经准备好了
40+
"""
41+
INFO_MSG('onInterfaceAppReady: bootstrapGroupIndex=%s, bootstrapGlobalIndex=%s' % \
42+
(os.getenv("KBE_BOOTIDX_GROUP"), os.getenv("KBE_BOOTIDX_GLOBAL")))
43+
44+
#KBEngine.addTimer(0.01, 1.0, onTick)
45+
g_poller.start("localhost", 30040)
46+
47+
def onTick(timerID):
48+
"""
49+
"""
50+
INFO_MSG('onTick()')
51+
52+
def onInterfaceAppShutDown():
53+
"""
54+
KBEngine method.
55+
这个interfaces被关闭前的回调函数
56+
"""
57+
INFO_MSG('onInterfaceAppShutDown()')
58+
g_poller.stop()
59+
60+
def onRequestCreateAccount(registerName, password, datas):
61+
"""
62+
KBEngine method.
63+
请求创建账号回调
64+
@param registerName: 客户端请求时所提交的名称
65+
@type registerName: string
66+
67+
@param password: 密码
68+
@type password: string
69+
70+
@param datas: 客户端请求时所附带的数据,可将数据转发第三方平台
71+
@type datas: bytes
72+
"""
73+
INFO_MSG('onRequestCreateAccount: registerName=%s' % (registerName))
74+
75+
commitName = registerName
76+
77+
# 默认账号名就是提交时的名
78+
realAccountName = commitName
79+
80+
# 此处可通过http等手段将请求提交至第三方平台,平台返回的数据也可放入datas
81+
# datas将会回调至客户端
82+
# 如果使用http访问,因为interfaces是单线程的,同步http访问容易卡住主线程,建议使用
83+
# KBEngine.urlopen("https://www.baidu.com",onHttpCallback)异步访问。也可以结合异步socket的方式与平台交互(参考Poller.py)。
84+
85+
KBEngine.createAccountResponse(commitName, realAccountName, datas, KBEngine.SERVER_SUCCESS)
86+
87+
def onRequestAccountLogin(loginName, password, datas):
88+
"""
89+
KBEngine method.
90+
请求登陆账号回调
91+
@param loginName: 客户端请求时所提交的名称
92+
@type loginName: string
93+
94+
@param password: 密码
95+
@type password: string
96+
97+
@param datas: 客户端请求时所附带的数据,可将数据转发第三方平台
98+
@type datas: bytes
99+
"""
100+
INFO_MSG('onRequestAccountLogin: registerName=%s' % (loginName))
101+
102+
commitName = loginName
103+
104+
# 默认账号名就是提交时的名
105+
realAccountName = commitName
106+
107+
# 此处可通过http等手段将请求提交至第三方平台,平台返回的数据也可放入datas
108+
# datas将会回调至客户端
109+
# 如果使用http访问,因为interfaces是单线程的,同步http访问容易卡住主线程,建议使用
110+
# KBEngine.urlopen("https://www.baidu.com",onHttpCallback)异步访问。也可以结合异步socket的方式与平台交互(参考Poller.py)。
111+
112+
# 如果返回码为KBEngine.SERVER_ERR_LOCAL_PROCESSING则表示验证登陆成功,但dbmgr需要检查账号密码,KBEngine.SERVER_SUCCESS则无需再检查密码
113+
KBEngine.accountLoginResponse(commitName, realAccountName, datas, KBEngine.SERVER_ERR_LOCAL_PROCESSING)
114+
115+
def onRequestCharge(ordersID, entityDBID, datas):
116+
"""
117+
KBEngine method.
118+
请求计费回调
119+
@param ordersID: 订单的ID
120+
@type ordersID: uint64
121+
122+
@param entityDBID: 提交订单的实体DBID
123+
@type entityDBID: uint64
124+
125+
@param datas: 客户端请求时所附带的数据,可将数据转发第三方平台
126+
@type datas: bytes
127+
"""
128+
INFO_MSG('onRequestCharge: entityDBID=%s, entityDBID=%s' % (ordersID, entityDBID))
129+
130+
# 此处可通过http等手段将请求提交至第三方平台,平台返回的数据也可放入datas
131+
# datas将会回调至baseapp的订单回调中,具体参考API手册charge
132+
# 如果使用http访问,因为interfaces是单线程的,同步http访问容易卡住主线程,建议使用
133+
# KBEngine.urlopen("https://www.baidu.com",onHttpCallback)异步访问。也可以结合异步socket的方式与平台交互(参考Poller.py)。
134+
135+
KBEngine.chargeResponse(ordersID, datas, KBEngine.SERVER_SUCCESS)
136+

0 commit comments

Comments
 (0)