KBE实践——登录案例

时间:2019-03-19
本文章向大家介绍KBE实践——登录案例,主要包括KBE实践——登录案例使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

目录

服务器

  1. 最小资产库创建

  2. entity配置

  3. 实体的Python实现

  4. 创建第一个空间Space

  5. 让entity进入空间Space

客户端(unity)

  1. 生成客户端SDK

  2. 实现Client部分验证

验证测试

====================================正文=====================================

服务器

  1. 最小资产库创建

    • 运行文件“new_assets.bat”,生成最小资产库“server_assets”,更名为“first_assets"
  2. entity配置

    • entity声明
      <root>
          <PlayerEntity hasClient="true"></PlayerEntity>
      </root>
      {资产库}/scripts/entities.xml

      hasClient 表示这个实体有客户端

    • entity配置
      • 新建def配置文件,配置文件名称规定为(实体名称.def)
      • 添加方法声明
        <root>
          <!-- Cell上的方法 -->
          <CellMethods>
            <Broadcast>
              <!--Exposed 表示此方法暴漏给客户端调用-->
              <Exposed/>
              <Arg> UNICODE </Arg>
            </Broadcast>
          </CellMethods>
        
          <!-- 客户端上的方法 -->
          <ClientrMethods>
            <onEnter>
            </onEnter>
        
            <SendMsgToServer>
              <Arg> UNICODE </Arg>
            </SendMsgToServer>
          </ClientrMethods>
        </root>
        {项目资产库}\scripts\entity_defs\PlayerEntity.def
  3. entity的 Python实现

    • 名称规则(实体名.py)
    • base文件夹下的部分
      # -*- coding utf-8 -*-
      import KBEngine
      from KBEDebug import *
      
      class FirstPlayer(KBEngine.Proxy):
          #base部分的实现
          def __init__(self):
              KBEngine.Entity.__init__(self)
      {资产库}\base\FirstPlayer.py
    • cell文件夹下的部分
      # -*- coding: utf-8 -*-
      import KBEngine
      from KBEDebug import *
      
      
      class FirstEntity(KBEngine.Entity):
          def __init__(self):
              KBEngine.Entity.__init__(self)
              #这里是FirstEntity的cell,当其Cell创建完毕时,通知其自身的客户端的onEnter函数
              self.client.onEnter()
      
          def SendMsgToServer(self, callerID, content):
              INFO_MSG("FirstPlay-SendMsgToServer")
              #广播给所有客户端
              self.allClient.Broadcast(str(self.id) + ":" + content)
      {资产库}\scripts\cell\FirstPlayer.py
    • entity何时创建?
      教程采用:使用账户入口对第一个enetity进行创建,只添加一句:<accountEntityScriptType> FirstEntity </accountEntityScriptType>
          <dbmgr>
              <account_system>
                  <accountEntityScriptType> PlayerEntity </accountEntityScriptType>
      {项目资产库}/res/server/kbengine.xml
  4. Space配置

    • entity声明和def文件配置
      <root>
          <PlayerEntity hasClient="true"></PlayerEntity>
          <!-- 添加下面这行 -->
          <WorldSpace></WorldSpace>
      </root>
      {资产库}\scripts\entities.xml
    • <root>
          <!-- BaseApp上的远程方法 -->
          <BaseMethods>
          </BaseMethods>
          <!-- CellApp上的远程方法 -->
          <CellMethods>
          </CellMethods>
      </root>
      {资产库}\scripts\entity_defs\WorldSpace.def
  5. Space的 Python实现

    • 名称规则(空间名.py)
    • base部分
      # -*- coding-utf8 -*-
      import KBEngine
      from KBEDebug import *
      
      
      class WorldSpace(KBEngine.Space):
          # WorldSpace的base部分,这是一个实体,并不是Space本身,Space位于内存中,我们通过这个实体关联并控制Space
          def __init__(self):
              KBEngine.Space.__init__(self)
              # 在全局变量globaldata字典中保存Space
              KBEngine.globalData["WorldSpace"] = self
      {资产库}\scripts\base\WorldSpace.py
    • cell部分
      import KBEngine
      
      
      class WorldSpace(KBEngine.Space):
          def __init__(self):
              KBEngine.Space.__init__(self)
              pass
      {资产库}\scripts\cell\WoldSpace.py
    • space何时创建
      教程采用:Baseapp就绪时创建Space空间,在baseapp就绪后加载空间space
      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")))
          #添加此句以使得space在baseapp启动后就加载进来
          KBEngine.createEntityLocally("WorldSpace", {})
      {资产库}\scripts\base\kbemain.py
  6. 验证空间Space是否加载成功

  7. 让entity进入空间Space

客户端(unity)

  1. 生成客户端SDK

  2. 实现Client部分验证

验证测试