💾 app的入口脚本
概述:
每个app进程都有一个入口脚本,通常叫做kbemain.py
。通过它可以对该app的一些事件进行处理,维护整个app的生命周期,使app正常运作。
入口脚本的名字并不是一定要求
kbemain.py
,可以在kbengine.xml
中进行修改,见引擎配置-app通用配置字段一文。
入口脚本主要处理的是回调函数,在每个app自己的生命周期里处理不同的事务。接下来我们会针对这些回调函数进行详细讲解。
Baseapp
回调函数过程:

回调函数API:
onInit(isReload):
描述:
当引擎启动后初始化完所有的脚本后这个接口被调用。
参数:
isReload
: bool,是否是被重写加载脚本后触发的。
onAutoLoadEntityCreate(entityType, dbID):
描述:
自动加载的实体创建时的回调,如果脚本层实现此回调,那么实体由脚本层创建,否则引擎默认使用createEntityAnywhereFromDBID来创建实体。
参数:
entityType
: string,指定要查询的Entity实体的类型。dbID
: int,指定要查询的Entity实体的数据库ID。
onBaseAppReady(isBootstrap):
描述:
当前Baseapp进程已经准备好的时候回调此函数。
参数:
isBootstrap
: bool,是否为第一个启动的Baseapp。
onReadyForLogin(isBootstrap):
描述:
当引擎启动并初始化完成后会一直调用此接口询问脚本层是否准备完毕,如果脚本层准备完毕则loginapp允许客户端登录。
参数:
isBootstrap
: bool,是否为第一个启动的Baseapp。
onReadyForShutDown():
描述:
当进程准备退出时,该回调函数被调用。如果返回True,则允许进入进程退出流程,返回其它值则进程会过一段时间后再次询问。
可以通过该回调控制进程退出的时机。
onBaseAppShutDown(state):
描述:
Baseapp关闭过程会回调此函数。
参数:
state
: int,如果state为0,意指在断开所有客户端之前,如果state为1,意指在将所有实体写入数据库之前,如果state为2,意指在所有实体被写入数据库之后。
onFini():
描述:
引擎正式关闭后回调此函数。
onCellAppDeath(addr):
描述:
某个cellapp死亡会回调此函数
参数:
addr
: tuple,死亡的cellapp地址。(ip, port)的tuple结构。
onLoseChargeCB(ordersID, dbid, success, datas):
描述:
当在interfaces中调用KBEngine.chargeResponse后,如果该订单丢失或者是不明interfaces未被记录的订单会收到此回调通知。
参数:
ordersID
: string,订单ID。dbid
: uint64,实体的数据库ID。success
: bool,是否成功。datas
: bytes,附带信息。
onBaseAppData(key, value):
描述:
KBEngine.baseAppData有改变时回调此函数。
参数:
key
: string,被改变数据的键。value
: object,被改变数据的值。
onBaseAppDataDel(key):
描述:
KBEngine.baseAppData有删除时回调此函数。
参数:
key
: string,被删除数据的键。
onGlobalData(key, value):
描述:
KBEngine.globalData有改变的时候回调此函数。
参数:
key
: string,被改变数据的键。value
: object,被改变数据的值。
onGlobalDataDel(key):
描述:
KBEngine.globalData有删除时回调此函数。
参数:
key
: string,被删除数据的键。
Cellapp
回调函数过程:

回调函数API:
onInit(isReload):
描述:
和Baseapp的一致,这里不再赘述,点我跳转上去
onCellAppData(key, value):
描述:
KBEngine.cellAppData有改变时回调此函数。
参数:
key
: string,被改变数据的键。value
: object,被改变数据的值。
onCellAppDataDel(key):
描述:
KBEngine.cellAppData有删除时回调此函数。
参数:
key
: string,被删除数据的键。
onGlobalData(key, value):
描述:
和Baseapp的一致,这里不再赘述,点我跳转上去
onGlobalDataDel(key):
描述:
和Baseapp的一致,这里不再赘述,点我跳转上去
onSpaceData(spaceID, key, value):
描述:
当space数据有改变的时候被调用。
space数据由用户通过setSpaceData设置。
参数:
spaceID
: int,空间的ID。key
: string,被改变数据的键。value
: object,被改变数据的值。
onSpaceGeometryLoaded(spaceID, mapping):
描述:
空间所需求的网格碰撞等数据加载完毕。
由用户通过addSpaceGeometryMapping设置。
参数:
spaceID
: int,空间的ID。mapping
: dict,网格碰撞数据的映射值。
onAllSpaceGeometryLoaded(spaceID, isBootstrap, mapping):
描述:
空间所需求的网格碰撞等数据全部加载完毕。
由用户通过addSpaceGeometryMapping设置。
参数:
spaceID
: int,空间的ID。isBootstrap
: bool,如果一个空间被分割由多个cell共同负载,那么isBootstrap描述的是是否为加载请求的发起cell。mapping
: dict,网格碰撞数据的映射值。
Loginapp
回调函数过程:

回调函数API:
onLoginAppReady():
描述:
当前Loginapp进程已经准备好的时候回调此函数。
onLoginAppShutDown():
描述:
当前Loginapp进程关闭会回调此函数。
onRequestLogin(loginName, password, clientType, datas):
描述:
客户端请求服务器登陆账号时回调。
参数:
loginName
: string,登陆时提交的账号名称。password
: string,登陆时提交的密码的MD5值。clientType
: int,客户端类型,客户端登陆时给出。datas
: bytes,客户端请求时所附带的数据,可将数据转发第三方平台。
onLoginCallbackFromDB(loginName, accountName, errorno, datas):
描述:
客户端请求服务器登陆账号后由dbmgr返回的回调。
参数:
loginName
: string,登陆时提交的账号名称。accountName
: string,真实的账号名称(由dbmgr处查询获得)。errorno
: int,错误码,如果非KBEngine.SERVER_SUCCESS则表示登陆失败。datas
: bytes,可能是任何数据,例如:第三方平台返回的数据或者由dbmgr以及interfaces中处理登陆时返回的数据。
onRequestCreateAccount(accountName, password, datas):
描述:
客户端请求服务器创建账号时回调。
参数:
accountName
: string,真实的账号名称(由dbmgr处查询获得)。password
: string,登陆时提交的密码的MD5值。datas
: bytes,客户端请求时所附带的数据,可将数据转发第三方平台。
onCreateAccountCallbackFromDB(accountName, errorno, datas):
描述:
客户端请求服务器创建账号后由dbmgr返回的回调。
参数:
accountName
: string,客户端提交的账号名称。errorno
: int,错误码,如果非KBEngine.SERVER_SUCCESS则表示登陆失败。datas
: bytes,可能是任何数据,例如:第三方平台返回的数据或者由dbmgr以及interfaces中处理登陆时返回的数据。
DBMgr
回调函数API:
onDBMgrReady():
描述:
当前DBMgr进程已经准备好的时候回调此函数。
onDBMgrShutDown():
描述:
当前DBMgr进程关闭会回调此函数。
onReadyForShutDown():
描述:
当进程准备退出时,该回调函数被调用。如果返回True,则允许进入进程退出流程,返回其它值则进程会过一段时间后再次询问。
onSelectAccountDBInterface(accountName):
描述:
返回某个账号对应的数据库接口,选定接口后dbmgr针对这个账号的相关操作都由对应的数据库接口完成。
返回:
string,数据库接口名。
参数:
accountName
: string,账号名称。
Interfaces
回调函数过程:

回调函数API:
onInterfaceAppReady():
描述:
当前Interfaces进程已经准备好的时候回调此函数。
onInterfaceAppShutDown():
描述:
当前Interfaces进程关闭会回调此函数。
onRequestCreateAccount(registerName, password, datas):
描述:
当客户端请求服务器创建账号时,该回调被调用。
可在此函数内数据进行检查和修改,将最终结果通过KBEngine.createAccountResponse提交给引擎。
参数:
registerName
: string,客户端请求时所提交的名称。password
: string,提交的密码。datas
: bytes,客户端请求时所附带的数据,可将数据转发第三方平台。
onRequestAccountLogin(loginName, password, datas):
描述:
当客户端请求服务器登陆账号时,该回调被调用。
可在此函数内数据进行检查和修改,将最终结果通过KBEngine.accountLoginResponse提交给引擎。
参数:
loginName
: string,客户端请求时所提交的名称。password
: string,提交的密码。datas
: bytes,客户端请求时所附带的数据,可将数据转发第三方平台。
onRequestCharge(ordersID, entityDBID, datas):
描述:
当请求计费时(通常是baseapp上调用了KBEngine.charge),该回调被调用。
可在此函数内数据进行检查和修改,将最终结果通过KBEngine.chargeResponse提交给引擎。
参数:
ordersID
: uint64,订单的ID。entityDBID
: uint64,提交订单的实体DBID。datas
: bytes,客户端请求时所附带的数据,可将数据转发第三方平台。
Logger
回调函数API:
onLoggerAppReady():
描述:
当前Logger进程已经准备好的时候回调此函数。
onLoggerAppShutDown():
描述:
当前Logger进程关闭会回调此函数。
onReadyForShutDown():
描述:
当进程准备退出时,该回调函数被调用。如果返回True,则允许进入进程退出流程,返回其它值则进程会过一段时间后再次询问。
onLogWrote(datas):
描述:
当logger进程获得了一条新日志,该回调函数被调用。
参数:
datas
: bytes,日志数据。