def onDBMgrReady(): """ KBEngine method. dbmgr已经准备好了 """ INFO_MSG('onDBMgrReady: bootstrapGroupIndex=%s, bootstrapGlobalIndex=%s' % \ (os.getenv("KBE_BOOTIDX_GROUP"), os.getenv("KBE_BOOTIDX_GLOBAL")))
def onLoginAppReady(): """ KBEngine method. loginapp已经准备好了 """ INFO_MSG('onLoginAppReady: bootstrapGroupIndex=%s, bootstrapGlobalIndex=%s' % \ (os.getenv("KBE_BOOTIDX_GROUP"), os.getenv("KBE_BOOTIDX_GLOBAL")))
def onInterfaceAppReady(): """ KBEngine method. interfaces已经准备好了 """ INFO_MSG('onInterfaceAppReady: bootstrapGroupIndex=%s, bootstrapGlobalIndex=%s' % \ (os.getenv("KBE_BOOTIDX_GROUP"), os.getenv("KBE_BOOTIDX_GLOBAL"))) plugins.plugins.open_async()
def onCreateAccountCallbackFromDB(accountName, errorno, datas): """ KBEngine method. 账号请求注册后db验证回调 errorno: KBEngine.SERVER_ERR_* """ INFO_MSG('onCreateAccountCallbackFromDB() accountName=%s, errorno=%s' % (accountName, errorno))
def onInit(isReload): """ KBEngine method. 当引擎启动后初始化完所有的脚本后这个接口被调用 @param isReload: 是否是被重写加载脚本后触发的 @type isReload: bool """ INFO_MSG('onInit::isReload:%s' % isReload) KBEngine.BaseApp.onInit(isReload)
def onReadyForShutDown(): """ KBEngine method. logger询问脚本层:我要shutdown了,你(脚本)是否准备好了? 如果返回True,则logger会进入shutdown的流程,其它值会使得logger在过一段时间后再次询问。 用户可以在收到消息时进行脚本层的数据清理工作,以让脚本层的工作成果不会因为shutdown而丢失。 """ INFO_MSG('onReadyForShutDown()') return True
def onBaseAppReady(isBootstrap): """ KBEngine method. baseapp已经准备好了 @param isBootstrap: 是否为第一个启动的baseapp @type isBootstrap: BOOL """ INFO_MSG('onBaseAppReady: isBootstrap=%s, appID=%s, bootstrapGroupIndex=%s, bootstrapGlobalIndex=%s' % \ (isBootstrap, os.getenv("KBE_COMPONENTID"), os.getenv("KBE_BOOTIDX_GROUP"), os.getenv("KBE_BOOTIDX_GLOBAL"))) KBEngine.BaseApp.onBaseAppReady()
def onLoginCallbackFromDB(loginName, accountName, errorno, datas): """ KBEngine method. 账号请求登陆后db验证回调 loginName:登录名既登录时客户端输入的名称。 accountName: 账号名则是dbmgr查询得到的名称。 errorno: KBEngine.SERVER_ERR_* 这个机制用于一个账号多名称系统或者多个第三方账号系统登入服务器。 客户端得到baseapp地址的同时也会返回这个账号名称,客户端登陆baseapp应该使用这个账号名称登陆 """ INFO_MSG( 'onLoginCallbackFromDB() loginName=%s, accountName=%s, errorno=%s' % (loginName, accountName, errorno))
def __onAvatarSaved(self, success, avatar): INFO_MSG('Account::_onAvatarSaved:(%i) create avatar state: %i, %i' % (self.id, success, avatar.databaseID)) # 如果此时账号已经销毁, 角色已经无法被记录则我们清除这个角色 if self.isDestroyed: ERROR_MSG("Account::__onAvatarSaved:(%i): i dead!" % self.id) if avatar: avatar.destroy(True) return avatarinfo = TAvatarInfo() if success: avatarinfo.dbid = avatar.databaseID avatarinfo.name = avatar.name self.avatars.append(avatarinfo) self.writeToDB() avatar.destroy() if self.client: self.client.onCreateAvatarResult(avatarinfo) self.onAvatarCreated(avatarinfo.dbid) else: ERROR_MSG("Account::__onAvatarSaved:(%i): failed!" % self.id)
def onRequestCharge(ordersID, entityDBID, datas): """ KBEngine method. 请求计费回调 @param ordersID: 订单的ID @type ordersID: uint64 @param entityDBID: 提交订单的实体DBID @type entityDBID: uint64 @param datas: 客户端请求时所附带的数据,可将数据转发第三方平台 @type datas: bytes """ INFO_MSG('onRequestCharge: ordersID=%s, entityDBID=%s' % (ordersID, entityDBID)) # 此处可通过http等手段将请求提交至第三方平台,平台返回的数据也可放入datas # datas将会回调至baseapp的订单回调中,具体参考API手册charge # 如果使用http访问,因为interfaces是单线程的,同步http访问容易卡住主线程,建议使用 # KBEngine.registerReadFileDescriptor()和KBEngine.registerWriteFileDescriptor()结合 # tornado异步访问。也可以结合socket模拟http的方式与平台交互。 # KBEngine.chargeResponse(ordersID, datas, KBEngine.SERVER_SUCCESS) plugins.plugins.onRequestCharge(ordersID, entityDBID, Bytes(datas))
def onDBMgrShutDown(): """ KBEngine method. 这个dbmgr被关闭前的回调函数 """ INFO_MSG('onDBMgrShutDown()')
def onTick(timerID): """ """ INFO_MSG('onTick()')
def onLoggerAppShutDown(): """ KBEngine method. 这个logger被关闭前的回调函数 """ INFO_MSG('onLoggerAppShutDown()')
def onInterfaceAppShutDown(): """ KBEngine method. 这个interfaces被关闭前的回调函数 """ INFO_MSG('onInterfaceAppShutDown()')